Remote control (10 / 17 steg)
Steg 10: Koden - Eprom
När du gör vissa menyer du vill ändra inställningarna en din arduino att spara dem och minnas dem efter en återställning eller när det blir slut så för att du behöver använda Eprom, som är lätt, men om du vill spara en int måste du dela den i 2 adresser. Jag hittade detta som lätt alltför om du tittar i koden jag har en funtion EEPROMWriteInt och även en readInt.
Så du har din alternativet, måste du ändra vissa värden. Låt oss säga att jag vill ändra skärmens bakgrundsbelysning på lcd/här gjorde jag ett knep, jag använder en multi dimensonal matris där jag spara eprom adresss, steget till ökar eller minskar värdet sparas i eprom, högsta värde, lägsta värdet.
prog_char obtions_0 [PROGMEM] = "Strålkastare";
prog_char obtions_1 [PROGMEM] = "Motljus";
prog_char obtions_2 [PROGMEM] = "Autopilot";
PROGMEM const char * obtions [] = {obtions_0,
obtions_1,
obtions_2};
definiera värden === [värde], [step], [min], [max]
värdet är i själva verket eeprom adress att läsa
int obtions_item_value [] [4] = {{72,1,0,1},
{2,10,0,255},
{70,1,0,1}}.
Och så här du lista bara alla alternativ i en meny och om du väljer det du kommer att ändra värdet i eprom. coment görs som om du markerar den andra option(Backlight)
void Obtions() {
om (option_open == 0) {
lcd.setCursor (0, pozCursor);
LCD.Print("\2");
lcd.setCursor (10, 7);
LCD.Print ("hem tillbaka");
utskriftsalternativ / / /
för (uint8_t x = 0, x < 3, x ++) {
lcd.setCursor (6 x);
strcpy_P (buffert, (char *) pgm_read_word (& (obtions [pozMeniu + x]))); LCD.Print(buffer);
}
upDown_navigate(2);
}
Om du väljer ett alternativ / / /
annat if (option_open == 1) {
lcd.setCursor(0,1);
strcpy_P (buffert, (char *) pgm_read_word (&(obtions[countUpDown])));
skriva ut alternativets namn (kom ihåg "countUpDown")
LCD.Print(buffer);
lcd.setCursor(0,2);
int x = EEPROMReadInt (obtions_item_value [countUpDown] [0]);
x = eprom läsa Int (2)
lcd.clearLine();
LCD.Print(x);
om (nyckel == "up") {
x = x + obtions_item_value [countUpDown] [1].
om in x = x + steget (steg här är 10)
om (x > obtions_item_value[countUpDown][3]) {
om x blir större då max, stoppa den (max här är 255)
x = obtions_item_value [countUpDown] [3].
}
}
om (nyckel == "down") {
x = x - obtions_item_value [countUpDown] [1].
om (x < obtions_item_value[countUpDown][2]) {
om x få mindre då min, stoppa den (min här är 0)
x = obtions_item_value [countUpDown] [2].
}
}
EEPROMWriteInt ((obtions_item_value [countUpDown] [0]), x);
Spara tillbaka på x i eprom
Delay(70);
}
option_open "0" eller "1" när trycker ok att gå in i obtion / / /
om (nyckel == "ok" & option_open == 0) {
option_open = 1;
LCD.Clear();
nyckel = "ingen nyckel";
}
annars om (nyckel == "ok" & option_open == 1) {
option_open = 0;
LCD.Clear();
nyckel = "ingen nyckel";
}
gå tillbaka en nivå om trycka tillbaka / / /
om (nyckel == "tillbaka") {
LCD.Clear();
Level = 1;
}
}