Problemi lettura EEProm dopo il riavvio

Buongiorno a tutti.

Sto impazzendo con un problema. Sto creando un piccolo firmware che si basa su Arduino + Scheda ESP8266.

In pratica l’utente deve fornire dei valori tramite pagina web e poi dovrei salvarli nella eeprom di Arduino. Il tutto funziona, ma nel momento in cui riavvio la scheda, ci sono altri valori. Incollo un pò di codice.

char eeprom_rele = 20;
byte rele[] = {0,0,0,0};

void loop(){
   if(condizione = true){
    rele[0] = 0;
    rele[1] = 1;
    rele[2] = 1;
    rele[3] = 2;

   for (int i = 0 ; i < 4; i++){
      Serial.print(rele[i]);
      Serial.print(" ");
      EEPROM.write(i + eeprom_rele, rele[i]);
   }
   // set ID to the known bit, so when you reset the Arduino is will use the EEPROM values
   EEPROM.write(0, 0x92); 

   }
}

Fino a quando la scheda è alimentata, dopo aver scritto i valori, se provo a leggerli con il comando EEProm.read(char); i valori corrispondono a quelli che inserisco io nel array rele. Se provo a riavviare arduino, i valori che mi restituisce sono i seguenti: 55, 49, 50, 51

Mi sembra un pò strano, ho anche provato a cambiare cella in fase di scrittura, se non ricordo male avevo provato con eeprom_rele = 70 ma il risultato finale è sempre lo stesso.

Sapete dire dove sbaglio ?

Su 8266 mi sembra che la eeprom sia simulata, e che per eseguire la vera scrittura serva una .commit

C1P8:
Su 8266 mi sembra che la eeprom sia simulata, e che per eseguire la vera scrittura serva una .commit

Esatto, su ESP8266 (dove NON esiste la EEPROM) la cosa è simulata, ma occorre usare delle altre istruzioni prima e dopo la scrittura sulla EEPROM … EEPROM.begin(xxxx) ed EEPROM.commit().

>bircastri: Cerca esempi per ESP8266, ne trovi quanti ne vuoi.

Guglielmo

bircastri:
In pratica l'utente deve fornire dei valori tramite pagina web e poi dovrei salvarli nella eeprom di Arduino.
..........
i valori che mi restituisce sono i seguenti: 55, 49, 50, 51

Ciao bircastri , se ho capito bene quanto da te fatto i dati cerchi di memorizzarli sulla EEPROM di Arduino e non sull' ESP8266. Il diverso sistema per scrivere sulla EEPROM simulata di quest'ultimo non dovrebbe quindi centrare. Non hai fornito il codice completo per capire meglio cosa avviene ma vorrei farti notare che i valori che ottieni sono il codice ASCII dei valori 7,1,2,3.... se invece di 55 avessi ricevuto un 48 ( codice ASCII di 0 ) avrei pensato ad una errata conversione di tipo ma comunque prova a verificare i tipi utilizzati e stampati.
Un altro suggerimento: sulla EEPROM non puoi scrivere infinite volte e quindi ti consiglierei di utilizzare il metodo EEPROM.put al posto di EEPROM.write che scrive il dato solamente se diverso da quello già presente.

ti ringrazio. Ho sostituito il .WRITE con il .PUT, inoltre eseguendo il commit come suggerito, il problema è stato risolto.

vi ringrazio