Arduino – impiego semplice ed avanzato della memoria EEPROM

Oltre i numeri interi a 8bit – libreria estesa

La libreria ufficiale dedicata all’uso della memoria EEPROM permette solo la lettura o scrittura di singoli Bytes, vale a dire valori interi compresi tra 0 e 255. Ciò risulta però un limite se volessimo memorizzare dei parametri di configurazione di tipo float, cioè a virgola mobile. Fortunatamente è stata scritta l’apposita libreria estesa EEPROMex (non ufficiale) adatta a questo scopo, il cui file .zip è scaricabile direttamente da qui.
Questa libreria permette di memorizzare valori del tipo int, float, long, double, bytes. In questo tutorial mi limiterò a esporre i primi 2. Per memorizzarli è sufficiente includere questa libreria in sostituzione a quella standard.

Valori int (16bit)

In Arduino, una variabile int può memorizzare valori interi a 2Bytes = 16bit e, contando che il primo bit è dedicato al segno, sono quindi compresi tra -(2^15) = -32768 e (2^15 – 1) = 32767.

Per impiegare la libreria estesa per memorizzare valori int, sono messe a disposizione le seguenti istruzioni:

EEPROM.readInt(indirizzo); → restituisce il valore intero memorizzato all’indirizzo indicato.

EEPROM.writeInt(indirizzo, valore_int); → scrive il valore intero all’indirizzo indicato.

EEPROM.updateInt(indirizzo, valore_int); → aggiorna il valore intero all’indirizzo indicato.

Ovviamente se vogliamo memorizzare più valori int non potremmo farlo su celle consecutive, ma dobbiamo considerare che ciascuno richiede 2Bytes di memoria, ovvero 2 celle. Se il primo valore vogliamo memorizzarlo indicando l’indirizzo 0, questo occuperà le due celle consecutive 0 e 1. Pertanto il secondo valore dovremmo memorizzarlo indicando l’indirizzo 2 e occuperà le celle 2 e 3.

Valori float (32bit)

Una variabile di tipo float può memorizzare valori a virgola mobile a 4Bytes = 32bit, compresi quindi tra -3.4028235*10^38 e 3.4028235*10^38.

Per impiegare la libreria estesa per memorizzare valori float, sono messe a disposizione le seguenti istruzioni:

EEPROM.readFloat(indirizzo); → restituisce il valore float memorizzato all’indirizzo indicato.

EEPROM.writeFloat(indirizzo, valore_float); → scrive il valore float all’indirizzo indicato.

EEPROM.updateFloat(indirizzo, valore_float); → aggiorna il valore float all’indirizzo indicato.

Come per i valori int, anche i valori float non possono essere memorizzati su celle consecutive, ma bisogna considerare che ciascuno di questi occuperà 4Bytes, ovvero 4 celle. Se il primo valore float lo memorizziamo indicando l’indirizzo 0, occuperà le celle 0,1,2,3. Il secondo valore pertanto dovrà essere memorizzato a partire dall’indirizzo 4 e occuperà le celle 4,5,6,7.

 

24,732 total views, 9 views today