Siempre recomendaba usar la memoria EEPROM en Arduino cuando se quería guardar un dato permanentemente sin importar si se reiniciaba el Arduino o si se desconectaba de la corriente, ya que al tratarse de una memoria no volátil es perfecto para eso, para guardar un dato que va cambiando de valor según la ejecución y del cual queremos recordar cual fue su ultimo valor.
Pero el caso es que nunca lo había puesto en practica así que para un post del hilo de Arduino en forocoches he creado este código.
El código lo que hace es simple, suma 1 a un contador almacenado en la EEPROM en la dirección de memoria 0 (de 512 disponibles), cada vez que el Arduino se reinicia o se conecta la corriente se suma 1 y se muestra el nuevo valor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
/** * Contador numerico de 1 a 244 usando la memoria EEPROM. * El contador siempre recuerda cual fue el ultimo numero * para asi poder sumar +1 y mostrar el ultimo resultado. * Da igual que se vaya la corriente o no se use el Arduino * durante muchos dias, la memoria EEPROM no se borra sola. */ #include <EEPROM.h> #define address 0 void setup() { // Obtiene el dato almacenado en la EEPROM en la posicion de memoria 0: byte contador = EEPROM.read(address); // Si la memoria leida contenia nuestro dato lo podremos usar... // Pero si nunca se habia usado esa parte de la memoria la funcion read de antes devolvera 255 y por lo tanto tendremos que inicializar el dato a 0. if( contador >= 255 ) contador = 0; // Se aumenta el contador: contador++; // Se escribe el nuevo contador en la direccion de memoria 0 de la EEPROM: EEPROM.write(address, contador); // Y para terminar se hace una pausa, se imprime el dato y se activa el led para indicar que se ha terminado: delay(1000); Serial.begin(9600); Serial.print("Contador= "); Serial.println(contador); pinMode(13, OUTPUT); digitalWrite(13, HIGH); } void loop() { } |
Como vemos es muy sencillo para almacenar un dato de tamaño byte… la cosa cambiara si queremos guardar mas datos, lo mejor seria usar una structura Union para facilitar el trabajo.
yo tengo una duda y si puedes ayudarme te lo agradeceré, suscede que tengo que guardar valores como 25 o 32.5 y posteriormente compararlos con los que me de un sensor, cuando guardo un numero me lo guarda como ascii y no puedo hacer la operación que me recomienda
Hola,
Esta entrada era un primer ejemplo lo mas simple posible para ver como funcionaba, si ya lo has probado ahora tendrás que pasar a este:
https://giltesa.com/2013/06/27/usar-la-memoria-eeprom-de-arduino-para-guardar-la-configuracion-del-programa-de-forma-muy-comoda/
Ese te permite guardar y recuperar cualquier tipo de dato sin necesidad de guardarlo como ascii.
Saludos!
Hola, trato de analizar el codigo y pues hay algo q no entiendo, en que parte del codigo le dices q cuente cada vez q se vaya la corriente? como le puedo hacer para que cuente por ejemplo usando un boton?
Hola,
Se ejecuta todo en el setup, no se usa el loop. Eso quiere decir que al encender el Arduino el código de setup se ejecuta una única vez de modo que se aumenta en 1 el contador y no se hace nada mas.
Si reinicias el Arduino pulsando en el botón reset y le quitas la corriente, el Arduino ejecutara de nuevo el setup y aumentara de nuevo el contador.
Para lo del botón te recomiendo que mires ejemplos de botones y leds, los pruebes, los entiendes y después podrás aplicarlo al ejemplo de la EEPROM, es facil.
Saludos.
Estoy que reviso varios foros para conocer un poco más del uso de la memoria EEPROM, estoy pensando hacer un proyecto donde se pueda guardar en la memoria cualquier hora del día que yo quiera ajustar. Luego en el transcurso del día la hora actual se compare con la guardada, al ser iguales encienda un led.