giovedì 15 marzo 2012

ContaKM parziale su Arduino, usa la EEPROM

Ecco un esempio semplificato per scrivere i dati parziali su EEPROM. Io ho usato una libreria che è veramente semplice da usare e affidabile.

I campi memorizzati sono quelli che uso come parziale, quando spengo e riaccendo lo scooter ovviamente vengono recuperati, poi ho un pulsante il cui compito è quello di azzerarne i valori, come fareste con l'auto.

Fate attenzione che su questo tipo di memoria le scritture sono limitate, per intendersi oltre le 100.000 scritture puo' fulminarsi. Io ho fatto in modo di memorizzare su EEPROM ogni 0,5Km percorsi.

N.B.: Prima di fare qualsiasi lettura, almeno una volta occorre fare una scrittura per assegnare ai byte utilizzati un valore, altrimenti la funzione di read va in crisi.



#include <avr/eeprom.h>

struct settings_t
{
double kmPerc; //km percorsi
double Ahconsum; // AH consumati totali
double parzkmPerc; // parziale km percorsi (trip)
double Ahparz; // AH consumati totali
};

#include <LiquidCrystal.h> // we need this library for the LCD commands // initialize the library with the numbers of the interface pins
LiquidCrystal lcd(4,5,6,7,8,9); // define our LCD and which pins to user
unsigned long i;
settings_t settings;

void setup()
{

Serial.begin(9600);
eeprom_read_block((void*)&settings, (void*)0, sizeof(settings));
settings.kmPerc=13734.0; //km percorsi
settings.Ahconsum=999.1; // AH consumati totali
settings.parzkmPerc=0.0; // parziale km percorsi (trip)
settings.Ahparz=0.0; // AH consumati totali
eeprom_write_block((const void*)&settings, (void*)0, sizeof(settings));
delay(100);
eeprom_read_block((void*)&settings, (void*)0, sizeof(settings));
// aggiungo +1 e scrivo su Eprom
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
// settings.kmPerc=settings.kmPerc+1.0;
lcd.print(settings.kmPerc);

}
void loop()
{
delay(1000);
lcd.setCursor(0,0);
lcd.print(settings.kmPerc);

}

Nessun commento: