la memoria EEPROM di Arduino, leggerla e scriverla con Get e Put

Ciao!
In questo post vi parlo di alcune semplici prove per iniziare ad utilizzare la memoria EEPROM di Arduino.

Come già saprete, in questa memoria è possibile memorizzare dati che non perderete allo spegnimento della scheda. Un po' come avere un (piccolissimo) hard disc, all'interno del vostro Arduino.

Certo, questo spazio di archiviazione è piuttosto ridicolo se comparato ad un vero disco rigido, pensate che è di solamente 1KB nell'Arduino Uno, ma sarò sufficiente per l'utilizzo in moltissimi progetti.
L'uso che maggiormente ne faccio è quello di memorizzare parametri di lavoro che passo alla scheda, via bluetooth o wifi magari, e che non voglio perdere una volta che la scheda viene spenta.
Ma è possibile addirittura usarla per un semplicissimo datalogger.





Per scrivere e leggere un dato sulla memoria EEPROM, esistono vari metodi, in questo post vedremo il Put e il Get, che a differenza del Read e Write ci semplificano il lavoro quando vogliamo salvare dati di dimensioni maggiori di 1Byte (valore da 0 a 255).

Passiamo subito al primo esempio concreto,
Primo esempio di scrittura sulla EEPROM con il metodo Put/Get


  1. #include
  2. char ArrayToWrite[10] = "TenChars!" ;
  3. char ArrayToRead[10];
  4. int Address;
  5. void setup() {
  6.   Address = 0;
  7.   Serial.begin(9600);
  8.   while (!Serial) {
  9.     ; // wait for serial port to connect. Needed for native USB port only
  10.   }
  11.   //One simple call, with the address first and the object second.
  12.   EEPROM.put(Address, ArrayToWrite);
  13.   Serial.println("Data writed!");
  14.   EEPROM.get(Address, ArrayToRead);
  15.   Serial.print("Readed: ");
  16.   Serial.println(ArrayToRead);
  17. }
  18. void loop() {
  19.   /* Empty loop */
  20. }


Questo sotto invece è un esempio di utilizzo dei metodi Put/Get con una struttura

  1. #include
  2. struct MyObject {
  3.   float field1;
  4.   byte field2;
  5.   char name[10];
  6. };
  7. int Address;
  8. void setup() {
  9.   Address = 0;
  10.   Serial.begin(9600);
  11.   while (!Serial) {
  12.     ; // wait for serial port to connect. Needed for native USB port only
  13.   }
  14.   MyObject customVar = {
  15.     3.14f,
  16.     65,
  17.     "Working!"
  18.   };
  19.   //One simple call, with the address first and the object second.
  20.   EEPROM.put(Address, customVar);
  21.   Serial.println("Data writed!");
  22.   EEPROM.get(Address, customVar);
  23.   Serial.print("Readed: ");
  24.   Serial.print(customVar.field1);
  25.   Serial.print(", ");
  26.   Serial.print(customVar.field2);
  27.   Serial.print(", ");
  28.   Serial.println(customVar.name);
  29. }
  30. void loop() {
  31.   /* Empty loop */
  32. }


Una cosa a cui prestare attenzione è che la EEPROM ha un numero limitato di cicli di scrittura (100k), può sembrare un numero enorme, ma può diventare molto piccolo se il codice non è ottimizzato.
Un'altra funzione della libreria, che ci aiuta per questa evenienza, si chiama Update, e scrive un byte solo se è variato rispetto a quello già scritto nella memoria.

Infine se volete leggere i valori dei singoli byte presenti nella EEPROM, trovate un codice utile nella pagina della funzione Read


Questo è tutto, ciao!
Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!

Nessun commento:

Posta un commento

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post