Guardando datos en Arduino utilizando la memoria EEPROM

12
3580

Los que han utilizado Arduino se habrán dado cuenta que cuando se reinicia el micro controlador utilizando el botón “reset” o bien, encendiendo y apagando el Arduino, el programa que esté colocado la memoria se reiniciará y no será posible utilizar cualquier dato que se haya tenido antes del reinicio. Si se tiene por ejemplo los datos de un sensor, todo lo que se haya leído se perderá en el reinicio.

Se dice que la memoria de Arduino, donde se almacena el código es una memoria volátil, cuyo contenido se borra cuando se interrumpe el flujo eléctrico. Sin embargo, Arduino al igual que muchos otros micro controladores posee una memoria no volátil, con un espacio de almacenamiento más reducido que la memoria volátil, pero aún así muy útil para nuestros propósitos.

Me estoy refiriendo a la memoria EEPROM (Electrically Erasable Programmable Read-Only Memory, o ROM programable y borrada eléctricamente).

Casi todos los modelos de Arduino tienen una EEPROM disponible, con diferentes capacidades dependiendo del modelo.

Image La información que se guarde en la memoria EEPROM podrá ser recuperada aún después de reiniciarse el micro controlador. Para lograr esto Arduino incluye la librería EEPROM que viene junto con Arduino IDE en el paquete que se descarga directamente desde la página oficial de Arduino. Consta básicamente de dos métodos:

  • read()
  • write()

Con el método read() se lee los valores que se hayan guardado en determinada posición de memoria, mientras que con el método write() se guarda la información en las posiciones de memoria. Las posiciones de memoria son el equivalentes a “casillas” donde se guarda la información. La cantidad de “casillas” disponibles depende del modelo. La cantidad de bytes equivale a la cantidad de casillas, por lo que un modelo de 512 bytes tendrá disponibles 512 “casillas” disponibles para guardar datos. Para escribir datos se utiliza: write(posición, valor) Ejemplo:

Para leer los datos se utiliza: read(posición) Ejemplo:

Espero que la información suministrada sea de utilidad. Saludos.

  • Jesús Eduardo

    Saludos desde Venezuela, hice unas pruebas con un simulador de arduino para no cargar tantas veces el programa al micro y no acortar tanto la vida util del mismo. El objetivo es que al encender o apagar una salida, yo pueda guardar ese dato en la EEPROM pero al hacerlo siempre me queda en uno el ultimo estado. El motivo es que con arduino tengo un controlador de luminarias horario y con variables no puedo hacerlo por razones mas que obvias, con esto quiero controlar el hecho de que al llegar la noche (hora de encendido) si se interrumpe el servicio eléctrico y/o se reinicia la tarjeta, se mantenga encendido hasta que llegue la hora de apagado. He intentado esto por rangos de tiempo u horas pero no funciona al 100% . ¿qué me recomiendas hacer? gracias.

    • Antony García González

      Puedes utilizar una memoria más grande, como una microSD o una EEPROM externa

  • Antony García González

    Puedes usar módulos microSD o SD. Hay modelos de Arduino que los traen integrados

  • Antony García González

    Agrega registros del estado del proceso a la memoria EEPROM

  • Antony García González

    No estoy seguro. Debe ser 0 o 255. Lo ideal es escribir las posiciones vacías en 0 antes de empezar a usar la EEPROM

  • rodrigo avila

    este es mi programa:
    if(led1==HIGH){
    long t0=millis();
    }
    if(led1==LOW){
    long t1=millis();
    tiempoleds=t1-t0
    EEPROM.write(1,tiempoleds);
    }

    como le hago para que sea un ciclo y que cada que se prenda y se apague durante el dia ese led , me guarde los tiempos en la variable tiempoleds?

  • Lalo León

    Hola que tal, antes que nada te felicito por tu profesionalismo y gran entusiasmo en el mundo de los microcontroladores ya que gracias a este espacio me haz salvado de grandes problemas… bueno mira quiero manejar numeros negativos con arduino usando la EEPROM, entonces quisiera saber que me recomiendas hacer para solucionar este problema ya que el momento de escribir por ejemplo -1 en algun espacio de memoria lo guarda con el valor 254, por lo que utiliza complemento a 2 para guardarlo peor para leerlo no lo lee como -1, sino como 254. EL problema está al leer el valor.
    Gracias.

    • Coloca el código que estas ejecutando, necesito saber el tipo de variable que estas usando.

  • Jorge

    Muestras una gran profesionalidad y una pedagogía excelente para explicar tus proyectos. Muchas gracias, me estoy iniciando en Arduino y tu página es muy buena, te seguiré en Facebook, saludos desde España.

  • Asís M.

    Gracias por el tiempo que dedicas a estos asuntos.
    Me gusta seguir tus publicaciones.