Stap 10: De code - Eprom
Als jij sommige menu's kunt u enkele instellingen wijzigen een je arduino opslaan en herinneren hen na een reset of wanneer het komt uit de macht, dus daarvoor u gebruiken Eprom, dat is gemakkelijk moet, maar als u wilt opslaan een int zul je om het te splitsen in 2 adressen. Ik vond dat dit ook gemakkelijk als je in de code kijkt ik heb een functie neer EEPROMWriteInt en ook een readInt.
Dus hebt u uw optie is geselecteerd, moet u sommige waarden wijzigen. Laten we zeggen ik wil veranderen van de helderheid van de achtergrondverlichting van de lcd/hier maakte ik een truc, ik gebruik een multi dimensonal matrix waar ik sparen de eprom-adresss, de stap aan de toename of afname van de waarde in eprom, de maximumwaarde en de minimumwaarde opgeslagen.
prog_char obtions_0[] PROGMEM = "Headlight"; prog_char obtions_1[] PROGMEM = "Backlight"; prog_char obtions_2[] PROGMEM = "Autopilot"; PROGMEM const char *obtions[] = {obtions_0, obtions_1, obtions_2 }; //define values ==== [value], [step], [min], [max] //value is in fact eeprom adress to read int obtions_item_value[][4] = { {72,1,0,1}, {2,10,0,255}, {70,1,0,1} };
Als deze lijst u enkel alle optie in een menu en als u het wijzigt u de waarde in de eprom. de coment worden gemaakt als u de tweede option(Backlight)
VOID Obtions() {als (option_open == 0) {} void Obtions(){ if (option_open == 0){ lcd.setCursor(0, pozCursor); lcd.print("\2"); lcd.setCursor(10, 7); lcd.print(" Home Back "); //////////////print options///////////////// for (uint8_t x = 0; x < 3 ; x++){ lcd.setCursor(6, x); strcpy_P(buffer, (char*)pgm_read_word(&(obtions[pozMeniu + x]))); lcd.print(buffer); } upDown_navigate(2); } /////////////////////if you select an option///////////////////// else if (option_open == 1){ lcd.setCursor(0,1); strcpy_P(buffer, (char*)pgm_read_word(&(obtions[countUpDown]))); //print the option name(remember "countUpDown") lcd.print(buffer); lcd.setCursor(0,2); int x = EEPROMReadInt( obtions_item_value[countUpDown][0] ); //x = eprom read Int (2) lcd.clearLine(); lcd.print(x); if (key == "up"){ x = x + obtions_item_value[countUpDown][1]; ///if up x = x + step (step here is 10) if ( x > obtions_item_value[countUpDown][3]){ // if x get bigger then max, stop it(max here is 255) x = obtions_item_value[countUpDown][3] ; } } if (key == "down"){ x = x - obtions_item_value[countUpDown][1]; if ( x < obtions_item_value[countUpDown][2]){ // if x get smaller then min, stop it(min here is 0) x = obtions_item_value[countUpDown][2] ; } } EEPROMWriteInt( (obtions_item_value[countUpDown][0]),x ); //save back the x in eprom delay(70); } //////////////option_open "0" or "1" when push ok to enter in obtion////////////////// if (key == "ok" & option_open == 0){ option_open = 1; lcd.clear(); key = "no key"; } else if (key == "ok" & option_open == 1){ option_open = 0; lcd.clear(); key = "no key"; } ////////////go back one level if push back///////////////////// if (key == "back"){ lcd.clear(); level = 1; } }