EEPROM duda al grabar y leer

Buenos dias foro, queria consultar si es valido verificar en el monitor serial un dato que quiero grabar en la eeprom para asegurarme que no lo estoy grabando en cada ciclo del programa, imagino que si en el monitor serial el dato aparece una sola vez "cuando lo llamo" significa que se estaría grabando solo una vez, espero haberme explicado claramente.

A mi no me resulta clara tu explicación...

Depende de como hagas tu programa.

Imagina esta situación

leer_eeprom = true

loop () {
  grabar_eeprom()
  si (leer_eeprom == true) {
    imprimir(contenido_eeprom())
    leer_eeprom = false
  }
}

la "llamo" una sola vez pero la grabo cientos o miles de veces por segundo. :man_facepalming:

@gatul por eso la pregunta principal es si el monitor serial es una buena referencia para ver si estoy grabando muchas veces o solo una vez, si veo este loop en el monitor serial (aun no lo he hecho) el dato se imprimirá miles de veces, por lo que me daría cuenta de que ese loop no sirve e intentaría otra opción.

EDIT: viendo bien el programa se nota que en ese ejemplo no sería una buena referencia el monitor serial, pero porque estoy tirando un dato que no me interesa al monitor, obviamente uno tiene q monitoreer la variable importante que seria grabar eeprom. Encontré un poco rebuscado el ejemplo.

Rebuscado y en pseudocódigo pero lo entendiste. :wink:

Como te dije, depende de como hagas el programa.
Proponé un código y lo vemos.

Saludos

1 Like

@gatul
he probado este código y funciona, lo probe varias veces y obviamente desconectando energía y el dato queda guardado, solo faltaria verificar si no se genera una grabación constante, según yo esta bien, porque la condición IF no se produce a cada momento y porque utilice la función eeprom.update.

if(digitalRead(10) == HIGH) //Si el valor de entrada es 1         
      timer3.restart();                //Resetea timer 3  
   
  if(timer3.isExpired()) {             //Cuando pasan los segundos preseteados
    timer3.stop(); 
    mode1 = !mode1;                //invertimos modo1 a su  negado
 (mode1) ? 
      (EEPROM.update(0, 0)) : (EEPROM.update(0, 1)) ;      //si se cumplieron las condiciones actualiza entre direccion 0 de eeprom en 1 o en 0
  }

lo que hace este código es invertir un bit entre 0 y 1 cuando se supere el tiempo seteado en timer.expired, por ejemplo para encender un led tengo que presionar X tiempo y queda encendido, hasta que nuevamente presione por X tiempo y queda apagado

Y cual es el problema en usar una variable digamos mode1 y haces esto

// en las variables globales
int mode1Ant = 0;
// donde corresponda esta porción de código
if(digitalRead(10) == HIGH) //Si el valor de entrada es 1         
      timer3.restart();                //Resetea timer 3  
   
  if(timer3.isExpired()) {             //Cuando pasan los segundos preseteados
    timer3.stop(); 
    mode1 = !mode1;                //invertimos modo1 a su  negado
  }
// luego cuando salgas de esa rutina
if (mode1 != mode1Ant) 
   Serial.println(mode);
mode1Ant = mode1;

@Surbyte el problema de ese codigo es que al apagar o desconectar se pierde la variable, por eso la necesidad de usar un espacio de memoria eeprom.

Y tu crees que no te entendí? Claro que si. Te estoy dando una idea para que verifiques si se escribe en todo momento o no, y para ello lo visualizas por monitor serie sin poner en riesgo la EEPROM.