Calificación:
  • 0 voto(s) - 0 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.
   // ...
}

resim
giltesa.com Mi blog personal sobre informática, electrónica, Arduino, bricolaje, etc.
Citar
#2
Muy buen aporte, y realmente interesante.
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  CONSULTA Simulador para arduino marcre 4 180 05-07-2018, 09:28 PM
Último mensaje: marcre
  Kit para iniciarse en arduino alex.rs98 5 571 22-08-2017, 09:05 AM
Último mensaje: cna
  PlatformIO - El IDE de IDEs para Arduino y 200 plataformas mas grafisoft 2 1,124 17-02-2017, 12:25 PM
Último mensaje: Iván
  Cómo se programa este Arduino? cybero 7 771 02-01-2017, 06:41 PM
Último mensaje: daniez
  problema con shield para arduino para cargar el codigo homer32 6 1,260 17-10-2016, 07:49 AM
Último mensaje: homer32