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(); } };
// 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); } }
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..... }
boolean AVL_tree::Remove(data d){ byte s = mSize; root = Remove(root, d); if(s == mSize) return false; else{ return true; saveEEPROM(); } }
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"); } }
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(); }
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; }
// 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(); }
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; }
void AVL_tree::RemoveTimer(const byte& timerid){ RemoveTimer(root, timerid); saveEEPROM(); }