26-06-2013, 11:32 PM
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.
// ...
}
giltesa.com Mi blog personal sobre informática, electrónica, Arduino, bricolaje, etc.