Explicación de Arduino EEPROM: recordar el último estado del LED

¿Alguna vez te has preguntado cómo recordar el último estado de un LED en tu proyecto de Arduino? ¡Pues estás de suerte! En este artículo te explicaremos todo lo que necesitas saber sobre la EEPROM de Arduino y cómo utilizarla para mantener el estado de tu LED. ¡Sigue leyendo para aprender más!

Este tutorial explica qué es la EEPROM de Arduino y para qué sirve. También le mostraremos cómo describir y leer la EEPROM y crear un ejemplo de proyecto para poner en práctica los conceptos aprendidos.

Explicación de Arduino EEPROM: recordar el último estado del LED

Tenemos un tutorial similar para el ESP32: Memoria flash ESP32: almacena datos permanentemente (escritura y lectura)

introducción

Cuando defines y usas una variable, los datos generados dentro de un boceto solo persisten mientras el Arduino esté encendido. Si reinicia o apaga el Arduino, los datos guardados desaparecerán.

Si desea guardar los datos para usarlos en el futuro, debe utilizar la EEPROM de Arduino. Esto guardará los datos de la variable incluso si se reinicia el Arduino o se apaga la alimentación.

¿Qué es la EEPROM?

El microcontrolador de la placa Arduino (ATMEGA328 en el caso de Arduino UNO, consulte la figura siguiente) tiene EEPROM (memoria de solo lectura programable y borrable eléctricamente). Este es un pequeño espacio de memoria que puede almacenar variables de bytes.

Las variables almacenadas en la EEPROM permanecen allí incluso si reinicias o apagas el Arduino. En pocas palabras, la EEPROM es una memoria permanente, similar al disco duro de las computadoras.

Explicación de Arduino EEPROM: recordar el último estado del LED

La EEPROM se puede leer, borrar y reescribir electrónicamente. En Arduino puedes leer y escribir fácilmente en EEPROM usando el EEPROM Biblioteca.

¿Cuántos bytes puedes almacenar?

Cada ubicación de EEPROM puede almacenar un byte, lo que significa que solo puede almacenar números de 8 bits, incluidos números enteros entre 0 y 255.

La cantidad de bytes que puede almacenar en EEPROM depende de los microcontroladores de las placas Arduino. Consulte la siguiente tabla:

Microcontrolador EEPROM
ATmega328 (Arduino Uno, Nano, Mini) 1024 bytes
ATmega168 (Arduino Nano) 512 bytes
ATmega2560 (Arduino Mega) 4096 bytes

Sin embargo, si necesita almacenar más datos, puede adquirir una EEPROM externa.

La vida útil limitada de la EEPROM

La EEPROM tiene una vida útil limitada. En Arduino, la EEPROM está especificada para manejar 100.000 ciclos de escritura/borrado para cada posición. Sin embargo, la lectura es ilimitada. Esto significa que puedes leer la EEPROM tantas veces como quieras sin afectar su vida útil.

Aplicaciones en proyectos Arduino – Recordar último estado

La EEPROM es útil en proyectos Arduino que necesitan retener datos incluso si se reinicia el Arduino o se corta la energía.

Esto es particularmente útil si desea recordar el último estado de una variable o la cantidad de veces que se activó un dispositivo.

Por ejemplo, imagine el siguiente escenario:

  • Controlas una lámpara con tu Arduino y la lámpara está encendida;
  • El Arduino pierde potencia repentinamente;
  • Cuando se restablece la energía, la lámpara permanece apagada y no conserva su último cambio.

Eso no debería suceder. Se supone que el Arduino debe recordar lo que sucedió antes del corte de energía y regresar al último estado.

Explicación de Arduino EEPROM: recordar el último estado del LED

Para resolver este problema, puede guardar el estado de la lámpara en EEPROM y agregar una condición a su boceto para verificar primero si el estado de la lámpara corresponde al estado previamente almacenado en EEPROM.

Ilustraremos esto con un ejemplo más adelante en esta publicación: Arduino EEPROM recuerda el estado del LED guardado.

Lee y escribe

Puede leer y escribir fácilmente en la EEPROM con el EEPROM Biblioteca.

Cómo integrar la biblioteca EEPROM:

#include <EEPROM.h>

Escribir

Para escribir datos en la EEPROM, utilice el EEPROM.escribir() Función que acepta dos argumentos. El primero es la ubicación o dirección de la EEPROM donde queremos guardar los datos, y el segundo es el valor que queremos guardar:

EEPROM.write(address, value);

Por ejemplo, para escribir 9 en la dirección 0, necesita:

EEPROM.write(0, 9);

Leer

Para leer un byte de la EEPROM, utilice el EEPROM.leer() Función. Esta función toma la dirección del byte como argumento.

EEPROM.read(address);

Por ejemplo, para leer el byte previamente almacenado en la dirección 0:

EEPROM.read(0);

Esto sería 9este es el valor almacenado en esta ubicación.

Actualizando un valor

El EEPROM.actualización() La función es particularmente útil. Sólo escribe en la EEPROM si el valor escrito difiere del ya almacenado.

Dado que la EEPROM tiene una vida útil limitada debido a ciclos limitados de escritura/borrado, EEPROM.actualización() funcionar en lugar de EEPROM.escribir() Guarda ciclos.

ellos usan el EEPROM.actualización() Funciona de la siguiente manera:

EEPROM.update(address, value);

Ahora mismo tenemos 9 almacenados en la dirección 0. Entonces si llamamos:

EEPROM.update(0, 9);

No se volverá a escribir en la EEPROM porque el valor almacenado actual es el mismo que queremos escribir.

Ejemplo: Arduino EEPROM recuerda el estado del LED guardado

En este ejemplo, le mostraremos cómo hacer que Arduino recuerde el estado del LED guardado incluso si reiniciamos el Arduino o se corta la energía.

La siguiente figura muestra lo que ilustraremos:

Explicación de Arduino EEPROM: recordar el último estado del LED

Piezas requeridas

Aquí están las piezas necesarias para este proyecto (haga clic en los enlaces a continuación para encontrar el mejor precio en Asesor de creadores):

Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!

Explicación de Arduino EEPROM: recordar el último estado del LED

Esquema

Aquí están los esquemas de este proyecto. Este es solo un botón que enciende y apaga un LED.

Explicación de Arduino EEPROM: recordar el último estado del LED

código

Copie el siguiente código en el IDE de Arduino y cárguelo en su placa Arduino. Asegúrese de haber seleccionado la placa y el puerto COM correctos.

/*
 * Rui Santos 
 * Complete Project Details https://randomnerdtutorials.com
 */

#include <EEPROM.h>

const int buttonPin = 8;    // pushbutton pin
const int ledPin = 4;       // LED pin

int ledState;                // variable to hold the led state
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;   // the previous reading from the input pin


// the following variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 50;    // the debounce time; increase if the output flickers

void setup() {
  // set input and output
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);

  // set initial LED state
  digitalWrite(ledPin, ledState);

  // initialize serial monitor
  Serial.begin (9600);

  //check stored LED state on EEPROM using function defined at the end of the code
  checkLedState(); 
}

void loop() {
  // read the state of the switch into a local variable
  int reading = digitalRead(buttonPin);

  if(reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }

  if((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer
    // than the debounce delay, so take it as the actual current state:

    // if the button state has changed:
    if(reading != buttonState) {
      buttonState = reading;

      // only toggle the LED if the new button state is HIGH
      if(buttonState == HIGH) {
        ledState = !ledState;
      }
    }
  }

  // set the LED state
  digitalWrite(ledPin, ledState);
  // save the current LED state in the EEPROM
  EEPROM.update(0, ledState);
  // save the reading.  Next time through the loop,
  // it'll be the lastButtonState
  lastButtonState = reading;
}

// Prints and upates the LED state
// when the Arduino board restarts or powers up
void checkLedState() {
   Serial.println("LED status after restart: ");
   ledState = EEPROM.read(0);
   if(ledState == 1) {
    Serial.println ("ON");
    digitalWrite(ledPin, HIGH);
   } 
   if(ledState == 0) {
    Serial.println ("OFF");
    digitalWrite(ledPin, LOW);
   }
}

Ver código sin formato

Este es un código antirrebote que cambia el estado del LED cada vez que presiona el botón. Sin embargo, este código tiene algo especial: recuerda el estado del LED guardado, incluso después de reiniciar o encender el Arduino.

Básicamente guardamos el estado actual del LED en el Estado del LED Variable y guárdela en la EEPROM con la siguiente línea:

EEPROM.update(0,ledState);

Al comienzo del código en el configuración()vamos a revisarlos Estado del LED almacenado en la EEPROM y el LED se enciende o apaga según este estado cuando reiniciamos el programa. Hacemos esto con una función que creamos al final del código. comprobarEstadoLed()

void checkLedState() {
    Serial.println("LED status after restart: ");
    ledState = EEPROM.read(0);
     if (ledState == 1) {
       Serial.println ("ON");
       digitalWrite(ledPin, HIGH);
     } 
     if (ledState == 0) {
       Serial.println ("OFF");
       digitalWrite(ledPin, LOW);
     }
}

demostración

Para ver una demostración de este ejemplo, vea el vídeo a continuación.

Envolver

En esta publicación, aprendiste sobre la EEPROM de Arduino y su uso. Ha creado un boceto de Arduino que recuerda el último estado del LED incluso después de restablecer el Arduino.

Este es sólo un ejemplo sencillo para ayudarle a comprender cómo se utiliza EEPROM. La idea es que apliques los conceptos aprendidos en este tutorial a tus propios proyectos.

Si te gusta Arduino, te recomendamos echar un vistazo a nuestros recursos de Arduino:

  • Proyectos Arduino paso a paso: cree 25 proyectos
  • Tutoriales gratuitos de Arduino
  • Mini curso gratuito de Arduino

Esperamos que este artículo te haya resultado útil.

Gracias por leer.

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded






Explicación de Arduino EEPROM: recordar el último estado del LED

Explicación de Arduino EEPROM: recordar el último estado del LED

Este tutorial explica qué es la EEPROM de Arduino y para qué es útil. También te mostraremos cómo escribir y leer desde la EEPROM y construir un ejemplo de proyecto para poner en práctica los conceptos aprendidos.

Introducción

Cuando defines y usas una variable, los datos generados dentro de un sketch solo duran mientras el Arduino está encendido. Si reseteas o apagas el Arduino, los datos almacenados desaparecen.

Si deseas mantener los datos almacenados para uso futuro, debes usar la EEPROM de Arduino. Esta almacena los datos de variables incluso cuando el Arduino se reinicia o se apaga.

¿Qué es la EEPROM?

El microcontrolador en la placa de Arduino (ATMEGA328 en el caso de Arduino UNO) tiene EEPROM (Memoria de solo lectura programable eléctricamente borrable). Este es un espacio pequeño que puede almacenar variables de bytes.

Las variables almacenadas en la EEPROM se mantienen allí, incluso cuando reseteas o apagas el Arduino. Simplemente, la EEPROM es un almacenamiento permanente similar a un disco duro en las computadoras.

¿Cuántos bytes se pueden almacenar?

Cada posición de la EEPROM puede guardar un byte, lo que significa que solo puedes almacenar números de 8 bits, que incluyen valores enteros entre 0 y 255.

Los bytes que se pueden almacenar en la EEPROM dependen de los microcontroladores en las placas de Arduino. Por ejemplo:

  • ATmega328 (Arduino Uno) – 1024 bytes
  • ATmega168 (Arduino Nano) – 512 bytes
  • ATmega2560 (Arduino Mega) – 4096 bytes

Si necesitas almacenar más datos, puedes obtener una EEPROM externa.

Aplicaciones en proyectos de Arduino – Recordar el último estado

La EEPROM es útil en proyectos de Arduino que necesitan mantener datos incluso cuando el Arduino se reinicia o cuando se quita la alimentación. Es especialmente útil para recordar el último estado de una variable o cuántas veces se activó un aparato.

Por ejemplo, imagina el siguiente escenario:

  • Estás controlando una lámpara con tu Arduino y la lámpara está encendida.
  • El Arduino pierde repentinamente la alimentación.
  • Cuando vuelve la energía, la lámpara permanece apagada, no conserva su último cambio.

No quieres que esto suceda. Quieres que el Arduino recuerde lo que estaba sucediendo antes de perder la energía y regresar al último estado.

Para resolver este problema, puedes guardar el estado de la lámpara en la EEPROM y agregar una condición a tu sketch para verificar inicialmente si el estado de la lámpara corresponde al estado previamente guardado en la EEPROM.

Lectura y Escritura

Puedes leer y escribir cómodamente en la EEPROM utilizando la biblioteca EEPROM de Arduino.

Para incluir la biblioteca EEPROM:

#include <EEPROM.h>

Para escribir datos en la EEPROM, utilizas la función EEPROM.write() que toma dos argumentos. El primero es la dirección o dirección de la EEPROM donde deseas guardar los datos, y el segundo es el valor que deseamos guardar.

Para leer un byte de la EEPROM, utilizas la función EEPROM.read(). Esta función toma la dirección del byte como argumento.

La función EEPROM.update() es especialmente útil. Solo escribe en la EEPROM si el valor escrito es diferente al que ya está guardado.

Ejemplo: Arduino EEPROM recordar estado LED almacenado

En este ejemplo, te mostramos cómo hacer que Arduino recuerde el estado LED almacenado, incluso cuando reiniciamos Arduino o se apaga la energía.

Este es solo un ejemplo simple para que entiendas cómo usar la EEPROM. La idea es que apliques los conceptos aprendidos en este tutorial a tus propios proyectos.

Si te gusta Arduino, te recomendamos echar un vistazo a nuestros recursos de Arduino:

Esperamos que hayas encontrado útil este artículo.


3 comentarios en «Explicación de Arduino EEPROM: recordar el último estado del LED»

Deja un comentario