Le schede Arduino hanno diversi tipi di memoria. Innanzitutto, è la RAM statica (memoria ad accesso casuale), che viene utilizzata per memorizzare le variabili durante l'esecuzione del programma. In secondo luogo, è la memoria flash che memorizza gli schizzi che hai scritto. E in terzo luogo, è una EEPROM che può essere utilizzata per memorizzare in modo permanente le informazioni. Il primo tipo di memoria è volatile, perde tutte le informazioni dopo aver riavviato Arduino. I secondi due tipi di memoria memorizzano le informazioni finché non vengono sovrascritte con una nuova, anche dopo lo spegnimento. L'ultimo tipo di memoria - EEPROM - consente di scrivere, memorizzare e leggere i dati secondo necessità. Considereremo ora questo ricordo.
Necessario
- -Arduino;
- - informatico.
Istruzioni
Passo 1
EEPROM sta per memoria di sola lettura programmabile cancellabile elettricamente, ad es. memoria di sola lettura cancellabile elettricamente. I dati in questa memoria possono essere conservati per decine di anni dopo lo spegnimento. Il numero di cicli di riscrittura è dell'ordine di diversi milioni di volte.
La quantità di memoria EEPROM in Arduino è piuttosto limitata: per le schede basate sul microcontrollore ATmega328 (ad esempio Arduino UNO e Nano), la quantità di memoria è di 1 KB, per le schede ATmega168 e ATmega8 - 512 byte, per ATmega2560 e ATmega1280 - 4KB.
Passo 2
Per lavorare con la EEPROM per Arduino, è stata scritta una libreria speciale, inclusa di default nell'IDE di Arduino. La libreria contiene le seguenti funzionalità.
read (address) - legge 1 byte dalla EEPROM; indirizzo - l'indirizzo da cui vengono letti i dati (cella a partire da 0);
scrittura (indirizzo, valore) - scrive il valore valore (1 byte, numero da 0 a 255) in memoria all'indirizzo indirizzo;
update (address, value) - sostituisce il valore all'indirizzo se il suo vecchio contenuto differisce da quello nuovo;
get (address, data) - legge i dati del tipo specificato dalla memoria all'indirizzo;
put (indirizzo, dati) - scrive i dati del tipo specificato nella memoria all'indirizzo;
EEPROM [indirizzo] - consente di utilizzare l'identificatore "EEPROM" come un array per scrivere e leggere dati dalla memoria.
Per utilizzare la libreria nello sketch, la includiamo con la direttiva #include EEPROM.h.
Passaggio 3
Scriviamo due numeri interi nella EEPROM e poi leggiamoli dalla EEPROM e li emettiamo sulla porta seriale.
Non ci sono problemi con i numeri da 0 a 255, occupano solo 1 byte di memoria e vengono scritti nella posizione desiderata utilizzando la funzione EEPROM.write().
Se il numero è maggiore di 255, allora utilizzando gli operatori highByte() e lowByte() deve essere diviso per byte e ogni byte deve essere scritto nella propria cella. Il numero massimo in questo caso è 65536 (o 2^16).
Guarda, il monitor della porta seriale nella cella 0 visualizza semplicemente un numero inferiore a 255. Nelle celle 1 e 2, viene memorizzato un numero elevato 789. In questo caso, la cella 1 memorizza il fattore di overflow 3 e la cella 2 memorizza il numero 21 mancante (cioè 789 = 3 * 256 + 21). Per riassemblare un numero grande, analizzato in byte, c'è la funzione word(): int val = word (hi, low), dove hi e low sono i valori dei byte high e low.
In tutte le altre celle che non abbiamo mai scritto, sono memorizzati i numeri 255.
Passaggio 4
Per scrivere numeri e stringhe in virgola mobile, utilizzare il metodo EEPROM.put() e, per leggere, utilizzare EEPROM.get().
Nella procedura setup(), scriviamo prima il numero in virgola mobile f. Quindi ci spostiamo per il numero di celle di memoria che occupa il tipo float e scriviamo una stringa di caratteri con una capacità di 20 celle.
Nella procedura loop() leggeremo tutte le celle di memoria e proveremo a decifrarle prima come tipo "float", quindi come tipo "char", e inviare il risultato alla porta seriale.
Puoi vedere che il valore nelle celle da 0 a 3 è stato correttamente definito come un numero in virgola mobile e, a partire dal 4, come una stringa.
I valori risultanti ovf (overflow) e nan (non un numero) indicano che il numero non può essere convertito correttamente in un numero a virgola mobile. Se sai esattamente che tipo di dati stanno occupando le celle di memoria, non avrai alcun problema.
Passaggio 5
Una caratteristica molto comoda è riferirsi alle celle di memoria come elementi di un array EEPROM. In questo sketch, nella procedura setup(), prima scriveremo i dati nei primi 4 byte, e nella procedura loop(), ogni minuto leggeremo i dati da tutte le celle e li emetteremo alla porta seriale.