Ciao ragazzi, vado subito al problema, per ogni riavvio di arduino devo andare a leggere nell'EEPROM alcuni valori di byte per dopo convertirli in decimale facendo una semplice divisione. Durante il salvataggio non possiedo nessuna difficoltà ma nella lettura mi ritrovo il valore diminuito di una unità,ma quando rivado a memorizzare lo stesso valore di prima, al prossimo riavvio lo legge in modo corretto.
Allora il valore che lui salva è ad esempio 52, quando lo vado a leggere lui la prima volta mi legge 51, successivamente rivado a salvare 52 e lui al prossimo riavvio mi legge 52. Questo vale per tutti i valori
allora come detto da SukkoPera con EEPROM.write() ed EEPROM.read() gestisci 1 byte, con il suo range di valore decimale da 0 a 255; tu stai utilizzando variabili di tipo double (4 bytes)...quindi con .get() e .put() leggi e scrivi tanti bytes quanti sono quelli indicati nella funzione...ed è più corretto visto il tipo di variabili in gioco.
Altra osservazione...stai usando delle double, che sono delle variabili float a doppia precisione, per maneggiare valori interi!?...puoi chiarirmi sto punto?
...mi sono dimenticato di scrivere un'altra cosa importante sulle variabili di tipo float (o double)...la loro aritmetica NON è così immediata come per le variabili di tipo int o boolean...prova ad eseguire il codice qui sotto e vedi per i due calcoli cosa ti ritorna il seriale (1==vero; 0==falso)...
ORSO2001:
... variabili di tipo float (o double) ...
... vi rammento che sugli Arduino basati su MCU AVR, float e double sono la stessa cosa, entrambi floating point a 32 bit e che la precisione è piuttosto scarsina:
Floats have only 6-7 decimal digits of precision. That means the total number of digits, not the number to the right of the decimal point. Unlike other platforms, where you can get more precision by using a double (e.g. up to 15 digits), on the Arduino, double is the same size as float.
Uttilizzando EEPROM.put e EEPROM.get lasciando le dovute celle libere... ad esempio quando salvo un double dovrò lasciare le 4 celle successive libere, se salvo un'intero dovrò lasciare 2 celle libere e per il byte solo una.