Explicacion de la EEPROM Arduino – Recordar el ultimo estado del LED

En esta publicación intentaremos dar una Explicacion de la EEPROM Arduino – Recordar el último estado del LED y  para qué sirve. También vamos a mostrar cómo escribir y leer de la EEPROM y construir un ejemplo de proyecto con arduino, para poner en práctica los conceptos aprendidos.



Introducción a la Explicacion de la EEPROM Arduino – Recordar el último estado del LED

Cuando definimos y utilizamos  una variable, los datos generados dentro de un boceto solo duran mientras el Arduino esté activado. Si se reinicia o apaga  Arduino, los datos almacenados desaparecen.

Si deseamos conservar los datos almacenados para su uso futuro, debemos utilizar la EEPROM de Arduino. Esto almacena los datos de la variable incluso cuando Arduino se restablece o se desconecta la alimentación.

¿Qué es EEPROM?

Explicacion de la EEPROM Arduino

El microcontrolador de la tarjeta Arduino (ATMEGA328 en el caso de Arduino UNO, mostrado en la figura siguiente) tiene EEPROM (Memoria de lectura programable borrable eléctricamente).  Este es un pequeño espacio que puede almacenar variables de byte.

Las variables almacenadas en la EEPROM se mantienen allí, evento cuando reinicia o apaga el Arduino. Simplemente, la EEPROM es un almacenamiento permanente similar a un disco duro en computadoras.

La EEPROM se puede leer, borrar y volver a escribir electrónicamente. En Arduino, podemos leer y escribir desde la EEPROM fácilmente usando la librería EEPROM.

¿Cuántos bytes puede almacenar la EEPROM?

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

Los bytes que puede almacenar en EEPROM dependen de los microcontroladores de las placas Arduino. Echa un vistazo a la siguiente tabla:

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




La vida finita de un EEPROM

La EEPROM tiene una vida finita. En Arduino, la EEPROM se especifica para manejar 100 000 ciclos de escritura / borrado para cada posición.

Sin embargo, las lecturas son ilimitadas. Esto significa que se puede leer de la EEPROM tantas veces como se desee sin comprometer su esperanza de vida.

Aplicaciones en proyectos Arduino – Recordar el último estado

La EEPROM es útil en proyectos de Arduino que necesitan mantener los datos incluso cuando Arduino se reinicia o cuando se elimina la alimentación.

Es especialmente útil recordar el último estado de una variable o recordar cuántas veces se activó un dispositivo.

Por ejemplo, imaginemos el siguiente escenario:

  • Estamos  controlando una lámpara con Arduino y la lámpara está encendida
  • Arduino de repente se queda sin alimentación o se reinicia.
  • Cuando la energía se vuelve a encender, la lámpara permanece apagada – no mantiene su último cambio





No queremos  que esto suceda. Queremos que Arduino recuerde lo que estaba pasando antes de apagarse o reiniciarse y vuelva al último estado.

Explicacion de la EEPROM Arduino

Para resolver este problema, podemos guardar el estado de la lámpara en la EEPROM y añadir una condición a su boceto para comprobar inicialmente si el estado de la lámpara corresponde al estado previamente guardado en la EEPROM.

Pondremos  un ejemplo más adelante en este post en el Ejemplo: Arduino EEPROM recuerda el estado del LED almacenado.

Leer y escribir

Puede leer y escribir fácilmente en la EEPROM utilizando la librería EEPROM.

Para incluir la biblioteca EEPROM:

#include <EEPROM.h>

Escribir

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

EEPROM.write (dirección, valor);

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

EEPROM.write (0, 9);

Leer

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

EEPROM.read (dirección);

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

EEPROM.read (0);

Esto devolvería 9, que es el valor almacenado en esa ubicación.



Actualizar un valor

La función EEPROM.update () es particularmente útil, sólo escribe en la EEPROM si el valor escrito es diferente del ya guardado.

Como la EEPROM tiene una esperanza de vida limitada debido a ciclos de escritura / borrado limitados, utilizando la función EEPROM.update () en lugar de EEPROM.write ()  se ahorra ciclos.

Utilice la función EEPROM.update () de la siguiente manera:

EEPROM.update (dirección, valor);

En este momento, tenemos 9 almacenados en la dirección 0. Así que, si hacemos:

EEPROM.update (0, 9)

No se volverá a escribir en la EEPROM, ya que el valor actualmente guardado es el mismo que queremos escribir.

Ejemplo: Arduino EEPROM recuerda el estado del LED almacenado

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

La siguiente figura muestra lo que vamos a ejemplificar:

Explicacion de la EEPROM Arduino



Piezas requeridas

Estas son las piezas necesarias para este proyecto:

Arduino (ver en Amazon)
LED (ver en Amazon)
Resistencia 220Ω (ver en Amazon)
Pulsador (ver en Amazon)
Resistencia 1kΩ (ver en Amazon)
Breadboard (ver en Amazon)
Cables de puente (ver en Amazon)

Esquemas

Estos son los esquemas de circuitos para este proyecto. Esto es sólo un pulsador que encenderá y apagará un LED.





Código

Copie el siguiente código en el IDE de Arduino y carguelo en su tarjeta Arduino. Asegúrese de tener la tarjeta derecha y el puerto COM seleccionado.

Todos los derechos reservados
Rui Santos
* Detalles completos del proyecto http://randomnerdtutorials.com
* /

#include <EEPROM.h>

Const int buttonPin = 8; // pulsador
Const int ledPin = 4; // LED pin

Int ledState; // variable para mantener el estado led
Int buttonState; // la lectura de corriente desde el pin de entrada
Int lastButtonState = LOW; // la lectura anterior del pin de entrada

// las siguientes variables son largas porque el tiempo, medido en milisegundos,
// se convertirá rápidamente en un número mayor que el que se puede almacenar en un int.
Long lastDebounceTime = 0; // la última vez que se activó el pin de salida
Largo debounceDelay = 50; // el tiempo de debounce; Aumentar si la salida parpadea

Void setup () {
// conjunto de entrada y salida
PinMode (botónPin, INPUT);
PinMode (ledPin, OUTPUT);

// establece el estado inicial del LED
DigitalWrite (ledPin, ledState);

// inicializar el monitor serie
Serial.begin (9600);

// comprueba el estado del LED almacenado en EEPROM utilizando la función definida al final del código
CheckLedState ();
}

Void loop () {
// lee el estado del switch en una variable local
Int lectura = digitalRead (buttonPin);

If (reading! = LastButtonState) {
// restablece el temporizador de rebote
LastDebounceTime = millis ();
}

If ((millis () - lastDebounceTime)> debounceDelay) {
// sea cual sea la lectura, ha estado allí por más tiempo
// que el retardo de rebote, así que tómelo como el actual estado actual:

// si el estado del botón ha cambiado:
If (reading! = ButtonState) {
ButtonState = lectura;

// sólo conmuta el LED si el estado del nuevo botón es ALTO
If (buttonState == HIGH) {
LedState =! LedState;
}
}
}

// establece el estado del LED
DigitalWrite (ledPin, ledState);
// guarda el estado actual del LED en la EEPROM
EEPROM.update (0, ledState);
// guardar la lectura. La próxima vez que pase por el bucle,
// será el estado lastButtonState
LastButtonState = lectura;
}

// Imprime y actualiza el estado del LED
// cuando la placa Arduino se reinicia o se enciende
Void checkLedState () {
Serial.println ("Estado del LED después del reinicio:");
LedState = EEPROM.read (0);
If (ledState == 1) {
Serial.println ("ON");
DigitalWrite (ledPin, ALTO);
}
If (ledState == 0) {
Serial.println ("OFF");
DigitalWrite (ledPin, LOW);
}
}





Este es un código de rebote que cambia el estado del LED cada vez que se presiona el botón. Pero hay algo especial en este código: recuerda el estado de LED guardado, incluso después de restablecer o encender el Arduino.

Básicamente, guardamos el estado actual del LED en la variable ledState y lo guardamos en la EEPROM con la siguiente línea:

EEPROM.update (0, ledState);

Al principio del código en el setup (), verificamos el ledState guardado en la EEPROM y ponemos el led encendido o apagado según ese estado cuando reiniciamos el programa. Lo hacemos con una función que hemos creado al final del código, checkLedState ();

Void checkLedState () {
Serial.println ("Estado del LED después del reinicio:");
LedState = EEPROM.read (0);
If (ledState == 1) {
Serial.println ("ON");
DigitalWrite (ledPin, ALTO);
}
If (ledState == 0) {
Serial.println ("OFF");
DigitalWrite (ledPin, LOW);
}
}




Demostración – Video

Para una demostración de este ejemplo, mira el video a continuación.

Para terminar

En esta publicación, has aprendido sobre Arduino EEPROM y para qué es útil.

Se ha creado un boceto Arduino que recuerda el último estado del LED incluso después de restablecer el Arduino.

Este es solo un ejemplo simple para que entiendas cómo se usa EEPROM.

La idea es que aplique los conceptos aprendidos en este tutorial a sus propios proyectos.

Si le gusta Arduino, le recomendamos los siguientes libros




Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *