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.
26,611 total views, 2 views today