Ma la mia osservazione l'hai capita?
Nel primo post hai scritto che la eeprom la scrivi con eeprom.writebyte e la leggi ancora con un altro writebyte.
Facendo una cosa alla volta un singolo byte lo leggi e lo scrivi senza problemi?
Nel caso in cui il numero da salvare sia superiore a 255 (es. 270), sottrai 255 a tale valore (270) e memorizzi la differenza in una nuova variabile (20). Successivamente, 255 lo salvi all'indirizzo 0 e la differenza (20) all'indirizzo 1. Se il valore che devi salvare è inferiore a 255, all'indirizzo 1 salvi il valore 0. Al momento della lettura fai la somma dei due indirizzi.
Non so per cosa ti serva, ma credo che in qualsiasi caso con un po' di ottimizzazione te la dovresti cavare con pochissimo codice.
Certo che non funziona, la eeprom.readByte ritorna un dato byte, se lo moltiplichi per 256 ottieni il risultato della moltiplicazione troncato ai primi otto bit, ovvero ottieni sempre zero.
Devi fare un casting a intero oppure assegna il valore della prima readbyte ad una variabile locale intera prima della moltiplicazione, poi fai la moltiplicazione, o uno shift a sinistra di otto bit, e sommi il secondo valore.
RoMZERO:
Se utilizzassi due indirizzi per salvare?
Mi spiego.
Nel caso in cui il numero da salvare sia superiore a 255 (es. 270), sottrai 255 a tale valore (270) e memorizzi la differenza in una nuova variabile (20). Successivamente, 255 lo salvi all'indirizzo 0 e la differenza (20) all'indirizzo 1. Se il valore che devi salvare è inferiore a 255, all'indirizzo 1 salvi il valore 0. Al momento della lettura fai la somma dei due indirizzi.
Non so per cosa ti serva, ma credo che in qualsiasi caso con un po' di ottimizzazione te la dovresti cavare con pochissimo codice.
Può andare come soluzione?
potrebbe ma il valore è un valore variabile perché è una temperatura
[/quote]
astrobeed:
Certo che non funziona, la eeprom.readByte ritorna un dato byte, se lo moltiplichi per 256 ottieni il risultato della moltiplicazione troncato ai primi otto bit, ovvero ottieni sempre zero.
Devi fare un casting a intero oppure assegna il valore della prima readbyte ad una variabile locale intera prima della moltiplicazione, poi fai la moltiplicazione, o uno shift a sinistra di otto bit, e sommi il secondo valore.
scusa ma non ho capito bene mi faresti un esempio?
birrohgt:
potrebbe ma il valore è un valore variabile perché è una temperatura
La mia proposta è un artificio, che potrebbe funziona (almeno credo), ma non ho grande esperienza in merito.
Aldilà di quanto ti ho proposto, ho fatto un po' di ricerca e mi sono imbattuto in questa libreria, che dovrebbe semplificare di molto la gestione "automatica" dei diversi formati durante il write/read sulla eeprom.
Il problema NON è nella EEPROM e nemmeno nella libreria ...
... è che se leggi un valore di tipo byte e lo moltiplichi per 256 ... VAI IN OVERFLOW !!!
La soluzione è o mettere i bytes in variabili di tipo int (16 bit) o, più semplicemente, usare l'operatore "cast" per indicare al compilatore di trattare qull'operazione con il giusto tipo !!!
Ma io leggo da due gg il topic, mi sembra impossibile che non ti sia venuto in mente di registrare 27.5 su due celle della eeprom, prendi il numero, separalo e fine...
io non credo che avrai mai una temperatura ambiente superiore ai 255 gradi, e come decimali non penso superiori a 99