Arduino-Boards haben verschiedene Arten von Speicher. Erstens handelt es sich um statisches RAM (Random Access Memory), das zum Speichern von Variablen während der Programmausführung verwendet wird. Zweitens ist es der Flash-Speicher, der die von Ihnen geschriebenen Skizzen speichert. Und drittens ist es ein EEPROM, mit dem Informationen dauerhaft gespeichert werden können. Der erste Speichertyp ist flüchtig, er verliert alle Informationen nach dem Neustart des Arduino. Die zweiten beiden Speichertypen speichern Informationen, bis sie durch eine neue überschrieben werden, auch nachdem der Strom ausgeschaltet wurde. Der letzte Speichertyp - EEPROM - ermöglicht das Schreiben, Speichern und Lesen von Daten nach Bedarf. Wir werden diese Erinnerung jetzt betrachten.
Notwendig
- -Arduino;
- - Computer.
Anweisungen
Schritt 1
EEPROM steht für Electrically Erasable Programmable Read-Only Memory, d.h. elektrisch löschbarer Festwertspeicher. Die Daten in diesem Speicher können nach dem Ausschalten des Geräts noch mehrere zehn Jahre gespeichert werden. Die Anzahl der Überschreibzyklen liegt in der Größenordnung von mehreren Millionen.
Die Menge des EEPROM-Speichers in Arduino ist ziemlich begrenzt: Für Boards, die auf dem Mikrocontroller ATmega328 basieren (zum Beispiel Arduino UNO und Nano), beträgt die Speichergröße 1 KB, für ATmega168- und ATmega8-Boards - 512 Byte, für ATmega2560 und ATmega1280 - 4KB.
Schritt 2
Um mit dem EEPROM für Arduino zu arbeiten, wurde eine spezielle Bibliothek geschrieben, die standardmäßig in der Arduino-IDE enthalten ist. Die Bibliothek enthält die folgenden Funktionen.
lesen (Adresse) - liest 1 Byte aus dem EEPROM; Adresse - die Adresse, von der die Daten gelesen werden (Zelle beginnend bei 0);
schreiben (Adresse, Wert) - schreibt den Wertwert (1 Byte, Zahl von 0 bis 255) in den Speicher an der Adressadresse;
update (Adresse, Wert) - ersetzt den Wert an Adresse, wenn sich der alte Inhalt vom neuen unterscheidet;
get (Adresse, Daten) - liest Daten des angegebenen Typs aus dem Speicher an der Adresse;
put (Adresse, Daten) - schreibt Daten des angegebenen Typs in den Speicher an der Adresse;
EEPROM [Adresse] - ermöglicht die Verwendung des "EEPROM"-Identifikators als Array, um Daten in den Speicher zu schreiben und aus ihm zu lesen.
Um die Bibliothek in der Skizze zu verwenden, binden wir sie mit der #include EEPROM.h-Direktive ein.
Schritt 3
Schreiben wir zwei Ganzzahlen in das EEPROM, lesen sie dann aus dem EEPROM und geben sie an den seriellen Port aus.
Bei Zahlen von 0 bis 255 gibt es keine Probleme, sie belegen nur 1 Byte Speicher und werden mit der Funktion EEPROM.write() an die gewünschte Stelle geschrieben.
Ist die Zahl größer als 255, muss sie mit den Operatoren highByte() und lowByte() durch Bytes geteilt und jedes Byte in eine eigene Zelle geschrieben werden. Die maximale Anzahl ist in diesem Fall 65536 (oder 2 ^ 16).
Schauen Sie, der Monitor der seriellen Schnittstelle in Zelle 0 zeigt einfach eine Zahl kleiner als 255 an. In den Zellen 1 und 2 wird eine große Zahl 789 gespeichert. In diesem Fall speichert Zelle 1 den Überlauffaktor 3 und Zelle 2 speichert die fehlende Zahl 21 (dh 789 = 3 * 256 + 21). Um eine große Zahl, die in Bytes geparst wurde, wieder zusammenzusetzen, gibt es die Funktion word(): int val = word (hi, low), wobei hi und low die Werte der High- und Low-Bytes sind.
In allen anderen Zellen, die wir nie aufgeschrieben haben, sind die Zahlen 255 gespeichert.
Schritt 4
Verwenden Sie zum Schreiben von Gleitkommazahlen und -strings die Methode EEPROM.put() und zum Lesen EEPROM.get().
In der Prozedur setup() schreiben wir zuerst die Gleitkommazahl f. Dann bewegen wir uns um die Anzahl der Speicherzellen, die der Float-Typ belegt, und schreiben eine Zeichenkette mit einer Kapazität von 20 Zellen.
In der loop()-Prozedur werden wir alle Speicherzellen lesen und versuchen, sie zuerst als "float"-Typ und dann als "char"-Typ zu entschlüsseln und das Ergebnis an die serielle Schnittstelle auszugeben.
Sie können sehen, dass der Wert in den Zellen 0 bis 3 korrekt als Gleitkommazahl und ab der 4. als String definiert wurde.
Die resultierenden Werte ovf (Überlauf) und nan (keine Zahl) weisen darauf hin, dass die Zahl nicht korrekt in eine Gleitkommazahl umgewandelt werden kann. Wenn Sie genau wissen, welche Art von Daten welche Speicherzellen belegen, haben Sie keine Probleme.
Schritt 5
Ein sehr bequemes Merkmal besteht darin, Speicherzellen als Elemente eines EEPROM-Arrays zu bezeichnen. In dieser Skizze werden wir in der Prozedur setup () zuerst die Daten in die ersten 4 Bytes schreiben und in der Prozedur loop () jede Minute Daten aus allen Zellen lesen und an den seriellen Port ausgeben.