Salve, sto guardando sulla reference le funzioni per scrivere sulla Eeprom interna e ho trovato (forse) un errore
Parameters
address: the location to write to, starting from 0 (int)
value: the value to write, from 0 to 255 (byte)
poi sotto c’è un esempio che riporto:
Example #include <EEPROM.h>
void setup()
{
for (int i = 0; i < 512; i++)
EEPROM.write(i, i);
}
In pratica sopra dice che può scrivere valori al massimo da 0 a 255 visto che si tratta di byte ma nell’esempio scrive anche valori fino a 512…
E’ un errore o posso scrivere anche valori più grandi di 255?
Non posso fare prove adesso perchè non ho arduino sotto mano.
Saluti
Comunque da poco hanno aggiornato il testo mettendo la grandeza delle EEprom nei diversi modelli dei ATmega. Prima parlava solo dei 512 Byte del ATmega168.
Ciao Uwe
Beh non è proprio un errore... la EEPROM memorizza valori di 1 byte, e quando il valore dato in ingresso a EEPROM.write supera 255 viene semplicemente fatto un cast e vengono memorizzati solo gli 8bit meno significativi. È l'architettura del linguaggio...
Ciao
Hai ragione che non é proprio un errore ma induce a far credere che si possano memorizzare dei numeri da 0 fino a 512. Per un principiante che interpreta in questo modo é fatale.
Ciao Uwe
Purtroppo è una semplificazione.
Se osservate bene il codice, l’autore ha usato il casting per far ripartire da 0 il valore da salvare nella cella senza usare 2 indici.
Per chiarezza avrebbe dovuto usare un codice simile al seguente:
int value=0;
int i;
for (int i = 0; i < 512; i++) {
EEPROM.write(i, value);
value++;
if (value>255) { value=0; }
}
}
Scrivendolo come l’ha scritto l’autore, ha risparmiato una variabile, rendendo però il codice meno leggibile da parte di un novellino.
Non sono d’accordo, non è considerabile come errore: sintatticamente non lo è. E’ una “finezza” lessicale lecita in C.
Altrimenti, secondo me, visto che comunque la memoria EEPROM di un 328 è di 1024 byte e quindi non ha più senso lasciare quell’esempio lì che sfrutta “tutti” i 512 byte, basterebbe modificare l’esempio originale mettendo:
for (int i = 0; i < 256; i++) {
EEPROM.write(i, i);
}
In questa maniera si taglia la testa al toro e si mette un esempio chiaro per tutti e sintatticamente corretto.