problemi con eeprom interna

Ciao Ragazzi ho un problema con la eeprom interna , sto usando la libreria EEPROM.h inclusa nell'ide. Sto creando una bilancia programmabile con il hx711 , le tarature che voglio inserire le voglio memorizzare nella eeprom perchè altrimenti andrebbero perse ogni qualvolta riaccendo. ho usato queste locazioni

float e_P1 =1;//taratura P1 float e_P2 =4;//taratura P2 float e_P3 =8;//taratura P3 float e_P4 =12;//taratura P4

e queste istruzioni per leggere

set_peso1 = EEPROM.read(e_P1); set_peso2 = EEPROM.read(e_P2); set_peso3 = EEPROM.read(e_P3); set_peso4 = EEPROM.read(e_P4);

e queste per scrivere

EEPROM.write(e_P1, set_peso4);

ma quando imposto un valore e poi spengo e riaccendo questo non mi ritorna uguale , non capisco dove sbaglio. Penso sia nelle locazioni il problema , ovviamente come avrete capito non sono molto esperto su questo campo e non ho trovato spiegazioni in rete . grazie del vostro tempo

... ma che tipo di dati stai scrivendo in EEPROM? :o

Perché, se hai studiato il reference, ti sei accorto che la EEPROM.write() e EEPROM.read() trattano solo dati di tipo "byte" e che il numero di cella da usare va indicato con un "int" ...

Guglielmo

Con la libreria inclusa nell'IDE non puoi scrivere float nella EEPROM ma solo valori interi. Se devi per forza usare float puoi lavorare con la EEPROMex --> https://github.com/thijse/Arduino-EEPROMEx Probabilmente la trovi anche nel Library Manager. (IDE 1.6.5)

si ho visto che con la libreria eeprom posso solo scrivere e leggere dati in INT e non float , ma allora perchè adesso sta funzionando???
avevo già sostituito nelle locazioni FLOAT con INT era un errore di scrittura

se volete posto il cod ma è un pò lunghetto

... magari posta SOLO la dichiarazione delle variabili e la parte dove leggi/scrivi in EEPROM. Mi raccomando, come da regolamento, il codice DEVE essere racchiuso tra i tag CODE ;)

Guglielmo

int    e_P1 =1;//taratura P1
int    e_P2 =4;//taratura P2
int    e_P3 =8;//taratura P3
int    e_P4 =12;//taratura P4
  set_peso1 = EEPROM.read(e_P1);
  set_peso2 = EEPROM.read(e_P2);
  set_peso3 = EEPROM.read(e_P3);
  set_peso4 = EEPROM.read(e_P4);
//Tarature peso 1
if ((in_prog==HIGH) && (stat==1)){
  if (val_P2==HIGH){
  delay(100);
  set_peso1++;
       if(set_peso1>=250){//blocca a 25gr
       set_peso1 = 0; 
       }
  lcd.setCursor(5,1);
  lcd.print(set_peso1/10);
  }
   if ((val_P3==HIGH) && (set_peso1 != 0)){
  delay(100);
  set_peso1--;
  lcd.setCursor(5,1);
  lcd.print(set_peso1/10); 
} 
  EEPROM.write(e_P1, set_peso1); 
}//fine taratura peso 1

L'indirizzo della cella è un int. Per la Zero varia da 0 a 1023; Mentre il dato da scrivere può essere un byte o un unsigned char e può variare da 0 a 256. Se hai bisogno di un valore intero puoi scrivere in 2 celle attigue e poi unire i due byte.

Se non hai necessità di scrivere ogni volta il dato una la funzione update e non write. Fa un controllo se il dato da scrivere è uguale a quello già memorizzato ed evita di riscriverlo. I cicli di scrittura sono limitati.

il ciclo di lettura lo ho inserito nella setup loop in maniera che solo al reset oppure alla riaccnsione venga letto, è corretto?

Si.