Paso 10: El código - Eprom
Cuando haces algunos menús tienes que modificar algunas opciones una el arduino para guardarlas y recordar después de un reset o cuando se pone fuera de la energía así que para eso necesita usar Eprom, que es fácil, pero si desea guardar un int tienes que dividirlo en 2 direcciones. He encontrado que esto es fácil también si nos fijamos en el código tengo un funtion EEPROMWriteInt y también un readInt.
Para que tengas la opción seleccionada, necesitará cambiar algunos valores. Digamos que quiero cambiar el brillo de la retroiluminación de la lcd/aquí hice un truco, usar una matriz de multi dimensonal donde guardar el domicilio de eprom, el paso que aumento o disminuye el valor guardado en la eprom, el valor máximo, valor mínimo.
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} };
Y como esto sólo Enumeras las opciones en un menú y si se selecciona se cambia el valor de la eprom. el coment se hacen como se selecciona el segundo option(Backlight)
void Obtions() {si (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; } }