Пример #1
0
void setupMenu(int input)
{
	updateM = 1;
	switch(input)
	{
	case KEY_OK:
		saveEEPROM();
		dateTimeInit();
		stateMenu = klokMenu;
		break;
	case KEY_UP:
		changeUtcUp();
		break;
	case KEY_DOWN:
		changeUtcDown();
		break;
	default:
		updateM = 0;
		break;
	}
	if (updateM == 1)
	{
		clearScreen();
		getMenuItem();
	}
};
Пример #2
0
// NEW
void AVL_tree::saveEEPROM(Node node){
  byte count = EEPROM.read(0); // How many switches in memory
  byte bytePerNode = 5;
  bool found = false;
  for(unsigned int i = 1; i <= count; ++i){
    unsigned int startAddr = (i * bytePerNode) - (bytePerNode - 1);
    if(EEPROM.read(startAddr) == node->d){
      saveEEPROM(node, startAddr);
      found = true;
      break;
    }
  }
  if(!found){
    unsigned int addr = (count * bytePerNode) + 1;
    saveEEPROM(node, addr);
    EEPROM.write(0, mSize);
  }
}
Пример #3
0
void AVL_tree::saveAllEEPROM(Node node, unsigned int& addr){
  if (node == NULL)
    return;

  saveEEPROM(node, addr);

  saveAllEEPROM(node->left, addr);
  saveAllEEPROM(node->right, addr);
}
int main(void)
{
	tm gmt;
	WatchDogDisable();
	NutDelay(100);
	SysInitIO();
	SPIinit();
	LedInit();
	LcdLowLevelInit();
	Uart0DriverInit();
	Uart0DriverStart();
	LogInit();
	LogMsg_P(LOG_INFO, PSTR("-----------------------------------------------------------------------------------------------"));
	CardInit();
	X12Init();
	if (X12RtcGetClock(&gmt) == 0)
	{
		LogMsg_P(LOG_INFO, PSTR("RTC time [%02d:%02d:%02d]\n"), gmt.tm_hour, gmt.tm_min, gmt.tm_sec );
	}
	if (At45dbInit() == AT45DB041B)
	{
		
	}
	RcInit();
	KbInit();
	SysControlMainBeat(ON);             // enable 4.4 msecs hartbeat interrupt
	NutThreadSetPriority(1);
	NutTimerInit();
	sei();

	printf("\nreading EEPROM\n");
	NutSleep(1000);
	readEEPROM();
	printf("UTC: %d\n",IMCconfig.UTC);
	NutSleep(1000);

	IMCconfig.UTC++;	
	printf("na ophoging UTC: %d\n",IMCconfig.UTC);
	saveEEPROM();
	NutSleep(1000);
	readEEPROM();
	printf("na saving en reading UTC: %d\n",IMCconfig.UTC);

	printf("\nResetting EEPROM\n");
	NutSleep(1000);
	resetEEPROM();
	NutSleep(1000);
	readEEPROM();

	for (;;)
	{
		
	}

	return(0);      // never reached, but 'main()' returns a non-void, so.....
}
Пример #5
0
boolean AVL_tree::Remove(data d){
  byte s = mSize;
  root = Remove(root, d);
  if(s == mSize)
    return false;
  else{
    return true;
    saveEEPROM();
  }
}
Пример #6
0
void MotorController::setup() {
	//this is where common parameters for motor controllers should be loaded from EEPROM

	//first set up the appropriate digital pins. All are active low currently
	/*
	 pinMode(MOTORCTL_INPUT_DRIVE_EN, INPUT_PULLUP); //Drive Enable
	 pinMode(MOTORCTL_INPUT_FORWARD, INPUT_PULLUP); //Forward gear
	 pinMode(MOTORCTL_INPUT_REVERSE, INPUT_PULLUP); //Reverse Gear
	 pinMode(MOTORCTL_INPUT_LIMP, INPUT_PULLUP); //Limp mode
	 */
#ifndef USE_HARD_CODED
	if (prefsHandler->checksumValid()) { //checksum is good, read in the values stored in EEPROM
		prefsHandler->read(EEMC_MAX_RPM, &speedMax);
		prefsHandler->read(EEMC_MAX_TORQUE, &torqueMax);
		prefsHandler->read(EEMC_PRECHARGE_C, &prechargeC);
		prefsHandler->read(EEMC_PRECHARGE_R, &prechargeR);
		prefsHandler->read(EEMC_NOMINAL_V, &nominalVolt);
		prefsHandler->read(EEMC_PRECHARGE_RELAY, &prechargeRelay);
		prefsHandler->read(EEMC_CONTACTOR_RELAY, &mainContactorRelay);
		prefsHandler->read(EEMC_REVERSE_LIMIT, &reversePercent);
	}
	else { //checksum invalid. Reinitialize values and store to EEPROM
		speedMax = MaxRPMValue;
		torqueMax = MaxTorqueValue;
		prechargeC = PrechargeC;
		prechargeR = PrechargeR;
		nominalVolt = NominalVolt;
		prechargeRelay = PrechargeRelay;
		mainContactorRelay = MainContactorRelay;
		reversePercent = ReversePercent;
		saveEEPROM();
	}

#else
	speedMax = MaxRPMValue;
	torqueMax = MaxTorqueValue;
	prechargeC = PrechargeC;
	prechargeR = PrechargeR;
	nominalVolt = NominalVolt;
	prechargeRelay = PrechargeRelay;
	mainContactorRelay = MainContactorRelay;
#endif

	Logger::info("MaxTorque: %i MaxRPM: %i", torqueMax, speedMax);
	if (prechargeC> 0 && prechargeRelay < NUM_OUTPUT) {
		//precharge time is 5RC which is (R*C / 1000) ms * 5 = RC/200 but ohms is in tenths so divide by another 10 = RC/2000
		prechargeTime = ((int)prechargeC * prechargeR) / 2000;
		Logger::info("RC precharge mode. C: %i  R: %i   Precharge time: %i ms", prechargeC, prechargeR, prechargeTime);
		setOutput(prechargeRelay, true); //start the precharge right now
		setOutput(mainContactorRelay, false); //just to be sure
	}
	else {
		Logger::info("Not precharging in RC mode");
	}
}
Пример #7
0
void saveIp() {
	if (AppConfig.Flags.bIsDHCPEnabled) {
		config.ipAddr.Val = 0xFFFFFFFF;
		config.netmask.Val = 0xFFFFFFFF;
		config.gateway.Val = 0xFFFFFFFF;
		config.dns1.Val = 0xFFFFFFFF;
		config.dns2.Val = 0xFFFFFFFF;
	} else {
		config.ipAddr.Val = AppConfig.MyIPAddr.Val;
		config.netmask.Val = AppConfig.MyMask.Val;
		config.gateway.Val = AppConfig.MyGateway.Val;
		config.dns1.Val = AppConfig.PrimaryDNSServer.Val;
		config.dns2.Val = AppConfig.SecondaryDNSServer.Val;
	}
	saveEEPROM((unsigned char*)&config, sizeof(config));
	Reset();
}
Пример #8
0
Node AVL_tree::Insert(Node& node, Node& newNode, bool save){
  if(node == NULL){ // If empty, insert it...
    node = newNode;
    ++mSize;
    if(save)
      saveEEPROM(node);
    return node;
  }
  /* Now check if we should go left or right */
  else if(newNode->d < node->d){ // If left
    Insert(node->left, newNode, save);
  }
  else if(newNode->d > node->d){ // If right
    Insert(node->right, newNode, save);
  }
  Balance(node);
  return node;
}
Пример #9
0
// Set Timer => timerid:onHour:onMinute:offHour:offMinute:switchidN:switchidK:....:switchidZ:
void AVL_tree::SetTimer(byte*& id_arr, byte timerid, byte onHour, byte onMinute, byte offHour, byte offMinute)
{
  while(*id_arr != 0 || id_arr == NULL)
    {
      Node node = Find(*id_arr);
      if( node != NULL)
	{
	  Serial.print(F("Setting timer on node: "));
	  Serial.println(node->d);
	  node->timerid = timerid;
	  node->onHour = onHour;
	  node->onMinute = onMinute;
	  node->offHour = offHour;
	  node->offMinute = offMinute;
	}
      id_arr++;
    }
  saveEEPROM();
}
Пример #10
0
Node AVL_tree::Insert(Node& node, data d, bool save){
  if(node == NULL){ // If empty, insert it...
    node = new TreeNode(d);
    node->status = false;
    node->timerid = 255;
    ++mSize;
    if(save)
      saveEEPROM(node);
    return node;
  }
  /* Now check if we should go left or right */
  else if(d < node->d){ // If left
    Insert(node->left, d, save);
  }
  else if(d > node->d){ // If right
    Insert(node->right, d, save);
  }
  Balance(node);
  return node;
}
Пример #11
0
void AVL_tree::RemoveTimer(const byte& timerid){
  RemoveTimer(root, timerid);
  saveEEPROM();
}