//ESP32_prueba_EEPROM
/*
https://forum.arduino.cc/t/store-array-to-eeprom-help/409109/2
https://www.reddit.com/r/arduino/comments/xtyi1t/id_like_to_save_a_whole_array_to_eeprom_using/?tl=es-es
https://www.luisllamas.es/esp32-eeprom/
https://www.luisllamas.es/esp32-preferences/
*/
#include <EEPROM.h> //ya esta incluida en ESP32
String diasDeLaSemanaCompleto[7] = {"Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"}; //para mostrar dias completos
byte diasSemanaRiego = 0b00000010; //pone a 1 los dias de riego bit 7.......0
String diasDeLaSemana[7] = {"d", "l", "m", "x", "j", "v", "s"}; // para entrar dias de riego
//variables glovales para ordenes
int diames= 4;
int mes=8;
int anno=25;
int hora= 13;
int minutos=0;
int segundos=0;
//programa riego
int horaRiego= 12;
int minutoRiego= 40;
int segundoRiego= 30;
//fin riego
int horaFinRiego= 12;
int minutoFinRiego= 41;
int segundoFinRiego=10;
//reloj
int direccion_reloj = 0; //direccion inicial horasDeRiego[7]
int reloj[6]= {25,8,29,18,11,30};//anno,mes,dia,hora.minutos,segundos
int direccion_horaRiego =sizeof(reloj); //direccion inicial horasDeRiego[7]
int horaRiegoA[7]= {20,21,22,23,24,5,16}; //horas de riego cada día
int direccion_minutoRiego = direccion_horaRiego + sizeof(horaRiego);
int minutoRiegoA[7]= {0,0,0,0,0,0,0}; //minutos de riego cada día
int direccion_segundoRiego = direccion_minutoRiego + sizeof(minutoRiego);
int segundoRiegoA[7]= {50,51,52,53,54,55,60}; //minutos de riego cada día
int direccion_horaFinRiego = direccion_segundoRiego + sizeof(segundoRiego);
int horaFinRiegoA[7]= {20,21,22,23,24,5,16};
int direccion_minutoFinRiego = direccion_horaFinRiego + sizeof(horaFinRiego);
int minutoFinRiegoA[7]= {2,2,22,3,4,5,6};
int direccion_segundoFinRiego = direccion_minutoFinRiego + sizeof(minutoFinRiego);
int segundoFinRiegoA[7]= {20,21,22,23,24,5,16};
int direccion_diasSemanaRiego= direccion_segundoFinRiego+ sizeof(segundoFinRiego);
int direccion_final= direccion_diasSemanaRiego+ sizeof(direccion_diasSemanaRiego);
void enviar(String info){
Serial.println(info);
//bot.sendMessage(CHAT_ID, info, ""); //telegram
}
String texto="";
void verEEPROM() {
//muestra contenido de la memoria
texto = "verEEPROM():\n";
// texto += fechaHoraFormatearda();
texto += "\n direcciones memoria: " ;
texto += " r:" +String(direccion_reloj);
texto += " hr:" +String(direccion_horaRiego);
texto += " mr:" +String(direccion_minutoRiego);
texto += " sr:" +String(direccion_segundoRiego);
texto += " hfr:" +String(direccion_horaFinRiego);
texto += " mfr:" +String(direccion_minutoFinRiego);
texto += " sfr:" +String(direccion_segundoFinRiego);
texto += " dr:" +String(direccion_diasSemanaRiego);
texto += " final:" +String(direccion_final);
texto += "\n reloj: ";
for (int i = 0; i < 6; i++) {
texto += String(EEPROM.get(direccion_reloj, reloj[i]));
if(i==2) {
texto +=" ";
} else{
if(i!=5) { texto +=":";}//elimina el último
}
} //for reloj
texto +="\n Riego programado por días de la semana:";
for (int i = 0; i < 7; i++) {
texto +="\n " + diasDeLaSemanaCompleto[i];
texto +=" I. "+String(EEPROM.get( direccion_horaRiego, horaRiegoA[i]));
texto +=":"+String(EEPROM.get(direccion_minutoRiego, minutoRiegoA[i]));
texto +=":"+String(EEPROM.get( direccion_segundoRiego, segundoRiegoA[i]));
texto +=" F. "+String(EEPROM.get( direccion_horaFinRiego, horaFinRiegoA[i]));
texto +=":"+String(EEPROM.get(direccion_minutoFinRiego, minutoFinRiegoA[i]));
texto +=":"+String(EEPROM.get( direccion_segundoFinRiego, segundoFinRiegoA[i]));
texto +=" T."+String(EEPROM.get( direccion_horaFinRiego, horaFinRiegoA[i])-EEPROM.get( direccion_horaRiego, horaRiegoA[i]));
texto +=":"+String(EEPROM.get( direccion_minutoFinRiego, minutoFinRiegoA[i])-EEPROM.get( direccion_minutoRiego, minutoRiegoA[i]));
texto +=":"+String(EEPROM.get( direccion_segundoFinRiego, segundoFinRiegoA[i])-EEPROM.get( direccion_segundoRiego, segundoRiegoA[i]));
} //for
enviar(texto);
} //verEEPROM
void iniciar_eeprom(){
//Guarda valores iniciales en la eeprom
if (EEPROM.get(direccion_reloj, reloj[0]) < 0) { EEPROM.put(direccion_reloj, reloj );} //inicia valores en eeprom si es la primera vez
if (EEPROM.get(direccion_horaRiego, horaRiegoA[0]) < 0) { EEPROM.put(direccion_horaRiego, horaRiegoA );}
if (EEPROM.get(direccion_minutoRiego, minutoRiegoA[0]) < 0) { EEPROM.put(direccion_minutoRiego, minutoRiegoA);}
if (EEPROM.get(direccion_segundoRiego, segundoRiegoA[0]) < 0) { EEPROM.put(direccion_segundoRiego, segundoRiegoA );}
if (EEPROM.get(direccion_horaFinRiego, horaFinRiegoA[0]) < 0) { EEPROM.put(direccion_horaFinRiego, horaFinRiegoA );}
if (EEPROM.get(direccion_minutoFinRiego,minutoFinRiegoA[0]) < 0) { EEPROM.put(direccion_minutoFinRiego,minutoFinRiegoA );}
if (EEPROM.get(direccion_segundoFinRiego,segundoFinRiegoA[0]) < 0) { EEPROM.put(direccion_segundoFinRiego,segundoFinRiegoA );}
if (EEPROM.get(direccion_diasSemanaRiego,diasSemanaRiego) < 0) { EEPROM.put(direccion_diasSemanaRiego,diasSemanaRiego );}
}
void iniciar_variables(){
//LEE VALOR DE MEMORIA Y PONE EN HORA RELOJ INTERNO
anno= EEPROM.get(direccion_reloj, reloj[0]);//EEPROM.readInt(memoria_anno);
mes= EEPROM.get(direccion_reloj, reloj[1]);//EEPROM.readInt(memoria_mes);
diames= EEPROM.get(direccion_reloj, reloj[2]);//EEPROM.readInt(memoria_dia);
hora=EEPROM.get(direccion_reloj, reloj[3]);//EEPROM.readInt(memoria_hora) ;
minutos= EEPROM.get(direccion_reloj, reloj[4]);//EEPROM.readInt(memoria_minutos);
segundos= EEPROM.get(direccion_reloj, reloj[5]);//EEPROM.readInt(memoria_segundos);
// DateTime now = rtc.now(); //obtiene fecha hora actuales
int i= 2 ;//now.dayOfTheWeek(); //dia de la semana LUNES
horaRiego= EEPROM.get( direccion_horaRiego, horaRiegoA[i]);//EEPROM.readInt(memoria_horaRiego);
minutoRiego= EEPROM.get( direccion_minutoRiego, minutoRiegoA[i]);//EEPROM.readInt(memoria_minutoRiego);
segundoRiego= EEPROM.get( direccion_segundoRiego, segundoRiegoA[i]);//EEPROM.readInt(memoria_segundoRiego);
horaFinRiego= EEPROM.get(direccion_horaFinRiego, horaFinRiegoA[i]);//EEPROM.readInt(memoria_horaFinRiego);
minutoFinRiego= EEPROM.get(direccion_minutoFinRiego, minutoFinRiegoA[i]);//EEPROM.readInt(memoria_minutoFinRiego);
segundoFinRiego=EEPROM.get(direccion_segundoFinRiego, segundoFinRiegoA[i]); //EEPROM.readInt(memoria_segundoFinRiego);
diasSemanaRiego = EEPROM.get(direccion_diasSemanaRiego, diasSemanaRiego);//EEPROM.readInt(memoria_diasSemanaRiego);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
iniciar_eeprom(); // carga valores nuevos -1 SI NO ESTA INICIADA ESA POSICIÓN DE MEMORIA HASTA 255B DE MEMORIA
iniciar_variables(); //LEE VALOR DE MEMORIA
delay(2000);
}
void loop() {
//verEEPROM();
// put your main code here, to run repeatedly:
for (int c = 1; c < 13; c++) {
reloj[1]=c;
EEPROM.put(direccion_horaRiego, horaRiegoA) ;
texto =c +" "+String(EEPROM.get( direccion_reloj, reloj[1]));
for (int i = 0; i < 6; i++) {
texto += "\n"+String(EEPROM.get(direccion_reloj, reloj[i]));
if(i==2) {
texto +=" ";
} else{
if(i!=5) { texto +=":";}//elimina el último
}
} //for reloj
enviar(texto);
delay(5000); // this speeds up the simulation
}
}
/*
texto="";
texto = "verEEPROM():\n";
//texto += fechaHoraFormatearda();
texto += "\n direcciones memoria: " ;
texto += " r:" +String(direccion_reloj);
texto += " hr:" +String(direccion_horaRiego);
texto += " mr:" +String(direccion_minutoRiego);
texto += " sr:" +String(direccion_segundoRiego);
texto += " hfr:" +String(direccion_horaFinRiego);
texto += " mfr:" +String(direccion_minutoFinRiego);
texto += " sfr:" +String(direccion_segundoFinRiego);
texto += " sfr:" +String(direccion_diasSemanaRiego);
texto += " final:" +String(direccion_final);
texto += "\n reloj: ";
// Serial.println(texto);
//texto="";
for (int i = 0; i < 6; i++) {
texto += String(EEPROM.get(direccion_reloj, reloj[i]));
if(i==2) {
texto +=" ";
} else{
if(i!=5) { texto +=":";}//elimina el último
}
} //for reloj
texto +="\n Riego programado por días de la semana:";
for (int i = 0; i < 7; i++) {
texto +="\n " + diasDeLaSemanaCompleto[i];
texto +=" I. "+String(EEPROM.get( direccion_horaRiego, horaRiego[i]));
texto +=":"+String(EEPROM.get(direccion_minutoRiego, minutoRiego[i]));
texto +=":"+String(EEPROM.get( direccion_segundoRiego, segundoRiego[i]));
texto +=" F. "+String(EEPROM.get( direccion_horaFinRiego, horaFinRiego[i]));
texto +=":"+String(EEPROM.get(direccion_minutoFinRiego, minutoFinRiego[i]));
texto +=":"+String(EEPROM.get( direccion_segundoFinRiego, segundoFinRiego[i]));
texto +=" T."+String(EEPROM.get( direccion_horaFinRiego, horaFinRiego[i])-EEPROM.get( direccion_horaRiego, horaRiego[i]));
texto +=":"+String(EEPROM.get( direccion_minutoFinRiego, minutoFinRiego[i])-EEPROM.get( direccion_minutoRiego, minutoRiego[i]));
texto +=":"+String(EEPROM.get( direccion_segundoFinRiego, segundoFinRiego[i])-EEPROM.get( direccion_segundoRiego, segundoRiego[i]));
} //for
texto +="\n ds: "+String(EEPROM.get( direccion_diasSemanaRiego, diasSemanaRiego));
Serial.println(texto);
EEPROM.put(direccion_reloj, reloj );
EEPROM.put(direccion_horaRiego, horaRiego );
EEPROM.put(direccion_minutoRiego, minutoRiego );
EEPROM.put(direccion_segundoRiego, segundoRiego );
EEPROM.put(direccion_horaFinRiego, horaFinRiego );
EEPROM.put(direccion_minutoFinRiego, minutoFinRiego );
EEPROM.put(direccion_segundoFinRiego, segundoFinRiego);
EEPROM.put(direccion_diasSemanaRiego, diasSemanaRiego);
*/