¿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.
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.
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.
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:
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):
- Arduino UNO – leer Los mejores kits de inicio de Arduino
- 1xLED
- 1x resistencia de 220Ω
- 1x pulsador
- 1x resistencia de 1kΩ
- 1x placa de pruebas
- Cables de puente
Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!
Esquema
Aquí están los esquemas de este proyecto. Este es solo un botón que enciende y apaga un 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);
}
}
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.
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:
- Proyectos paso a paso de Arduino – Construye 25 proyectos
- Tutoriales gratuitos de Arduino
- Mini Curso gratuito de Arduino
Esperamos que hayas encontrado útil este artículo.
¡Interesante! Siempre es útil tener guías como esta para entender mejor cómo funciona Arduino. ¡Gracias por compartirlo!
¡Muy útil para novatos como yo! ¡Gracias por explicarlo de manera sencilla!
¡Gracias por explicar de manera clara y fácil de entender cómo recordar el estado del LED en Arduino! ¡Siempre es bueno aprender trucos como este para mejorar en nuestros proyectos! ¡Excelente artículo!