Dosky Arduino majú niekoľko typov pamätí. Najskôr je to statická RAM (pamäť s náhodným prístupom), ktorá sa používa na ukladanie premenných počas vykonávania programu. Po druhé, je to flash pamäť, ktorá ukladá náčrty, ktoré ste napísali. A do tretice, ide o EEPROM, ktorú je možné použiť na trvalé ukladanie informácií. Prvý typ pamäte je nestály, po reštarte Arduina stráca všetky informácie. Druhé dva typy pamätí uchovávajú informácie, kým nebudú prepísané novými, a to aj po vypnutí napájania. Posledný typ pamäte - EEPROM - umožňuje podľa potreby zapisovať, ukladať a čítať údaje. Túto spomienku teraz zvážime.
Nevyhnutné
- - Arduino;
- - počítač.
Inštrukcie
Krok 1
EEPROM znamená elektricky mazateľná programovateľná pamäť iba na čítanie, t.j. elektricky vymazateľná pamäť iba na čítanie. Dáta v tejto pamäti je možné ukladať ešte desiatky rokov po vypnutí napájania. Počet prepisovacích cyklov je rádovo niekoľko miliónovkrát.
Množstvo pamäte EEPROM v Arduine je dosť obmedzené: pre dosky založené na mikrokontroléri ATmega328 (napríklad Arduino UNO a Nano) je veľkosť pamäte 1 kB, pre dosky ATmega168 a ATmega8 - 512 bajtov, pre ATmega2560 a ATmega1280 - 4 kB.
Krok 2
Pre prácu s EEPROM pre Arduino bola napísaná špeciálna knižnica, ktorá je štandardne zahrnutá v Arduino IDE. Knižnica obsahuje nasledujúce funkcie.
read (address) - načíta 1 bajt z EEPROM; adresa - adresa, z ktorej sa údaje načítajú (bunka začínajúca od 0);
write (adresa, hodnota) - zapíše hodnotu hodnoty (1 bajt, počet od 0 do 255) do pamäte na adresu adresy;
aktualizácia (adresa, hodnota) - nahradí hodnotu na adrese, ak sa jej starý obsah líši od nového;
get (adresa, dáta) - načíta dáta zadaného typu z pamäte na adresu;
put (adresa, údaje) - zapíše údaje zadaného typu do pamäte na adrese;
EEPROM [adresa] - umožňuje vám použiť identifikátor „EEPROM“ako pole na zápis dát do a na čítanie z pamäte.
Ak chcete knižnicu použiť v náčrte, zahrnieme ju do smernice #include EEPROM.h.
Krok 3
Poďme zapísať dve celé čísla do EEPROM a potom ich načítať z EEPROM a odoslať ich na sériový port.
S číslami od 0 do 255 nie sú problémy, zaberajú iba 1 bajt pamäte a zapisujú sa na požadované miesto pomocou funkcie EEPROM.write ().
Ak je číslo väčšie ako 255, musí sa pomocou operátorov highByte () a lowByte () vydeliť bajtmi a každý bajt sa musí zapísať do vlastnej bunky. Maximálny počet je v tomto prípade 65536 (alebo 2 ^ 16).
Pozrite sa, monitor sériového portu v bunke 0 jednoducho zobrazuje číslo menšie ako 255. V bunkách 1 a 2 je uložené veľké číslo 789. V takom prípade bunka 1 uchováva faktor pretečenia 3 a bunka 2 chýbajúce číslo 21 (tj. 789 = 3 * 256 + 21). Ak chcete znova zostaviť veľké množstvo, rozdelené na bajty, existuje funkcia word (): int val = slovo (hi, low), kde hi a low sú hodnoty vysokého a nízkeho bajtu.
Vo všetkých ostatných bunkách, ktoré sme si nikdy nezapísali, sú uložené čísla 255.
Krok 4
Na zápis čísel a reťazcov s pohyblivou rádovou čiarkou použite metódu EEPROM.put () a na čítanie použite EEPROM.get ().
V procedúre setup () najskôr napíšeme plávajúcu desatinnú čiarku číslo f. Potom sa presunieme o počet pamäťových buniek, ktoré floatový typ zaberá, a napíšeme char reťazec s kapacitou 20 buniek.
V procedúre loop () prečítame všetky pamäťové bunky a pokúsime sa ich dešifrovať najskôr ako „float“typu, a potom ako „char“typu a výsledok odošleme na sériový port.
Vidíte, že hodnota v bunkách 0 až 3 bola správne definovaná ako číslo s pohyblivou rádovou čiarkou a od 4. bodu - ako reťazec.
Výsledné hodnoty ovf (pretečenie) a nan (nie číslo) naznačujú, že číslo nemožno správne previesť na číslo s pohyblivou rádovou čiarkou. Ak presne viete, aký typ dát zaberajú pamäťové bunky, nebudete mať žiadne problémy.
Krok 5
Veľmi pohodlnou vlastnosťou je označiť pamäťové bunky ako prvky poľa EEPROM. V tomto náčrte v procedúre setup () najskôr zapíšeme údaje do prvých 4 bajtov a v procedúre loop () každú minútu prečítame údaje zo všetkých buniek a odošleme ich na sériový port.