This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 2 voto(s) - 2.5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Usar la memoria EEPROM d Arduino para la config del programa
#1
Usar la memoria EEPROM de Arduino para guardar la configuración del programa de forma muy cómoda :zpalomitas:

Código:
/*
   Author:     Alberto Gil Tesa
   WebSite:    http://giltesa.com
   License:    CC BY-NC-SA 3.0
   Date:       26/06/2013

   Description:
      Ejemplo de uso de una estructura STRUCT y UNION combinadas
      para almacenar varios datos de forma comoda en la memoria
      EEPROM del Arduino.

      Cada vez que se reinicia el Arduino con el boton de RESET,
      o se conecte a la corriente, aumentaran los datos y se
      imprimiran los nuevos.

      Solo es un ejemplo, lo ideal seria guardar la configuracion
      de nuestro programa al encender el Arduino, y modificarla
      desde un menu con un LCD y unos botones, etc.

      Recomiendo leer las entradas:
         Estructuras UNION:      http://giltesa.com/?p=13666
         Uso de las estructuras: http://giltesa.com/?p=13693
*/


struct DATOS{
   float   temperatura;
   float   humedad;
   int     luz;
   boolean usable;
};

union MEMORIA{
   DATOS dato;
   byte  b[sizeof(DATOS)];
}
miMemoria;


#include <EEPROM.h>
#define address 0


void setup()
{
   // Se recuperan los datos de la memoria EEPROM:
   for( int i=0 ; i<sizeof(DATOS) ; i++  )
      miMemoria.b[i] = EEPROM.read( address+i );


   // Se comprueba que se hayan podido leer los datos (que no se haya leido basura)
   // No es la forma mas elegante de hacerlo pero funciona:
   if( miMemoria.dato.usable == true )
   {
      miMemoria.dato.temperatura += 0.5;
      miMemoria.dato.humedad += 0.1;
      miMemoria.dato.luz += 1;
   }
   // Si nunca se habian usado se inicializan todos los datos:
   else
   {
      miMemoria.dato.temperatura = 0.0;
      miMemoria.dato.humedad = 0.0;
      miMemoria.dato.luz = 0;
      miMemoria.dato.usable = true;
   }


   // Se guardan los datos en la memoria EEPROM:
   for( int i=0 ; i<sizeof(DATOS) ; i++  )
      EEPROM.write( address+i , miMemoria.b[i] );


   // Se imprime por pantalla los datos:
   delay(1000);
   Serial.begin(9600);
   Serial.print("Temperatura = "); Serial.println(miMemoria.dato.temperatura);
   Serial.print("Humedad     = "); Serial.println(miMemoria.dato.humedad);
   Serial.print("Luz         = "); Serial.println(miMemoria.dato.luz);
   pinMode(13, OUTPUT);
   digitalWrite(13, HIGH);
}

void loop()
{
   // Una vez cargamos los datos en el SETUP ya podemos hacer uso de ellos desde nuestro programa.
   // ...
}

[Imagen: eeprom-structure.png]
giltesa.com Mi blog personal sobre informática, electrónica, Arduino, bricolaje, etc.
  Responder
#2
Muy buen aporte, y realmente interesante.
-> Mi CNC de escritorio CNCDesktop 500 -> https://www.spainlabs.com/foros/tema-Fresadora-Desktop-CNC-500
-> Laboratorio de Fabricación Digital Maker www.lowpower.io 
--> Twitter: https://twitter.com/Grafisoft_ES  | IG: https://www.instagram.com/lowpowerio/
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  Que placa Arduino usar? Valecall 1 308 26-07-2021, 05:10 PM
Último mensaje: asesorplaza1
  ¿Como diferenciar chip nano y borrar su eeprom? Forsito 5 1,099 14-03-2019, 06:45 AM
Último mensaje: Nullz
  DUDA Borrar eeprom Vicente48 9 2,780 11-01-2019, 08:24 AM
Último mensaje: Vicente48
  DUDA Ayuda con programa Girarrelojes con motor paso a paso 28BYJ-48 y ULN2003 Alvaro Braca 7 2,271 30-10-2018, 06:25 AM
Último mensaje: edu_v
  Cómo se programa este Arduino? cybero 7 2,058 02-01-2017, 06:41 PM
Último mensaje: daniez