Plošče Arduino imajo več vrst pomnilnika. Najprej gre za statični RAM (pomnilnik z naključnim dostopom), ki se uporablja za shranjevanje spremenljivk med izvajanjem programa. Drugič, flash pomnilnik shranjuje skice, ki ste jih napisali. In tretjič, to je EEPROM, ki se lahko uporablja za trajno shranjevanje informacij. Prva vrsta pomnilnika je nestanovitna, po ponovnem zagonu Arduina izgubi vse informacije. Drugi dve vrsti pomnilnika shranjujeta podatke, dokler jih ne prepišejo z novimi, tudi po izklopu napajanja. Zadnja vrsta pomnilnika - EEPROM - omogoča zapisovanje, shranjevanje in branje podatkov po potrebi. Ta spomin bomo obravnavali zdaj.
Potrebno
- - Arduino;
- - računalnik.
Navodila
Korak 1
EEPROM je kratica za električno izbrisljiv programljiv bralni pomnilnik, tj. električno izbrisljiv samo bralni pomnilnik. Podatke v tem pomnilniku lahko shranite še deset let po izklopu napajanja. Število ciklov prepisovanja je približno nekaj milijonov krat.
Količina pomnilnika EEPROM v Arduinu je precej omejena: za plošče, ki temeljijo na mikrokrmilniku ATmega328 (na primer Arduino UNO in Nano), je količina pomnilnika 1 KB, za plošče ATmega168 in ATmega8 - 512 bajtov, za ATmega2560 in ATmega1280 - 4 KB.
2. korak
Za delo z EEPROM-om za Arduino je napisana posebna knjižnica, ki je privzeto vključena v Arduino IDE. Knjižnica vsebuje naslednje funkcije.
branje (naslov) - prebere 1 bajt iz EEPROM-a; naslov - naslov, od koder se berejo podatki (celica se začne od 0);
zapis (naslov, vrednost) - vrednost vrednosti (1 bajt, številka od 0 do 255) zapiše v pomnilnik na naslovu;
posodobitev (naslov, vrednost) - nadomesti vrednost na naslovu, če se stara vsebina razlikuje od nove;
get (naslov, podatki) - prebere podatke določene vrste iz pomnilnika na naslovu;
put (naslov, podatki) - zapisuje podatke določene vrste v pomnilnik na naslovu;
EEPROM [naslov] - omogoča uporabo identifikatorja "EEPROM" kot matrike za zapisovanje podatkov in branje iz pomnilnika.
Za uporabo knjižnice v skici jo vključimo v direktivo #include EEPROM.h.
3. korak
Na EEPROM zapišemo dve celi števili, nato jih preberemo iz EEPROM-a in jih izpišemo v serijska vrata.
S številkami od 0 do 255 ni težav, zavzamejo le 1 bajt pomnilnika in jih s funkcijo EEPROM.write () zapišejo na želeno mesto.
Če je število večje od 255, ga je treba z uporabo operatorjev highByte () in lowByte () deliti z bajti in vsak bajt zapisati v svojo celico. V tem primeru je največ 65536 (ali 2 ^ 16).
Poglejte, monitor serijskih vrat v celici 0 preprosto prikaže številko, manjšo od 255. V celicah 1 in 2 je shranjenih veliko število 789. V tem primeru celica 1 shrani faktor prelivanja 3, celica 2 pa manjkajočo številko 21 (tj. 789 = 3 * 256 + 21). Za ponovno sestavljanje velikega števila, razčlenjenega na bajte, obstaja funkcija word (): int val = beseda (hi, low), kjer sta hi in low vrednosti visokih in nizkih bajtov.
V vseh drugih celicah, ki jih nikoli nismo zapisali, so shranjene številke 255.
4. korak
Če želite zapisovati številke in nize s plavajočo vejico, uporabite metodo EEPROM.put (), za branje pa EEPROM.get ().
V postopku setup () najprej zapišemo število s plavajočo vejico f. Nato se premaknemo za število pomnilniških celic, ki jih zaseda float tip, in zapišemo niz char s kapaciteto 20 celic.
V postopku loop () bomo prebrali vse pomnilniške celice in jih poskušali najprej dešifrirati kot "float", nato pa kot "char" in rezultat poslati v serijska vrata.
Vidite lahko, da je bila vrednost v celicah od 0 do 3 pravilno definirana kot številka s plavajočo vejico, od 4. pa kot niz.
Nastali vrednosti ovf (overflow) in nan (ne število) kažeta, da številke ni mogoče pravilno pretvoriti v številko s plavajočo vejico. Če natančno veste, katero vrsto podatkov zasedajo pomnilniške celice, ne boste imeli težav.
5. korak
Zelo priročna lastnost je sklicevanje na pomnilniške celice kot na elemente matrike EEPROM. V tej skici bomo v postopku setup () podatke najprej zapisali v prvih 4 bajtov, v postopku loop () pa bomo vsako minuto prebrali podatke iz vseh celic in jih poslali v serijska vrata.