Plăcile Arduino au mai multe tipuri de memorie. În primul rând, este RAM statică (memorie cu acces aleatoriu), care este utilizată pentru a stoca variabile în timpul executării programului. În al doilea rând, memoria flash stochează schițele pe care le-ați scris. Și în al treilea rând, este o EEPROM care poate fi utilizată pentru stocarea permanentă a informațiilor. Primul tip de memorie este volatil, pierde toate informațiile după repornirea Arduino. Al doilea tip de memorie stochează informații până când este suprascris cu unul nou, chiar și după oprirea alimentării. Ultimul tip de memorie - EEPROM - permite ca datele să fie scrise, stocate și citite după cum este necesar. Vom lua în considerare această amintire acum.
Necesar
- - Arduino;
- - calculator.
Instrucțiuni
Pasul 1
EEPROM înseamnă Memorie numai în citire programabilă ștergibilă electric, adică memorie numai în citire ștearsă electric. Datele din această memorie pot fi stocate timp de zeci de ani după oprirea alimentării. Numărul ciclurilor de rescriere este de ordinul a câteva milioane de ori.
Cantitatea de memorie EEPROM din Arduino este destul de limitată: pentru plăcile bazate pe microcontrolerul ATmega328 (de exemplu, Arduino UNO și Nano), memoria este de 1 KB, pentru plăcile ATmega168 și ATmega8 - 512 octeți, pentru ATmega2560 și ATmega1280 - 4 KB.
Pasul 2
Pentru a lucra cu EEPROM pentru Arduino, a fost scrisă o bibliotecă specială, care este inclusă în IDE-ul Arduino în mod implicit. Biblioteca conține următoarele caracteristici.
citire (adresă) - citește 1 octet din EEPROM; adresa - adresa de unde sunt citite datele (celula începând de la 0);
write (address, value) - scrie valoarea valorii (1 octet, număr de la 0 la 255) în memorie la adresa adresei;
actualizare (adresă, valoare) - înlocuiește valoarea la adresa dacă conținutul său vechi diferă de cel nou;
obține (adresă, date) - citește date de tipul specificat din memorie la adresă;
put (adresa, date) - scrie date de tipul specificat în memorie la adresa;
EEPROM [adresă] - vă permite să utilizați identificatorul „EEPROM” ca matrice pentru a scrie date și a le citi din memorie.
Pentru a utiliza biblioteca în schiță, o includem cu directiva #include EEPROM.h.
Pasul 3
Să scriem două numere întregi în EEPROM și apoi să le citim din EEPROM și să le trimitem la portul serial.
Nu există probleme cu numerele de la 0 la 255, acestea ocupă doar 1 octet de memorie și sunt scrise în locația dorită folosind funcția EEPROM.write ().
Dacă numărul este mai mare de 255, atunci utilizând operatorii highByte () și lowByte () acesta trebuie împărțit la octeți și fiecare octet trebuie scris în propria celulă. Numărul maxim în acest caz este 65536 (sau 2 ^ 16).
Uite, monitorul de port serial din celula 0 afișează pur și simplu un număr mai mic de 255. În celulele 1 și 2, este stocat un număr mare 789. În acest caz, celula 1 stochează factorul de depășire 3, iar celula 2 stochează numărul lipsă 21 (adică 789 = 3 * 256 + 21). Pentru a reasambla un număr mare, analizat în octeți, există funcția cuvânt (): int val = cuvânt (hi, low), unde hi și low sunt valorile octeților mari și mici.
În toate celelalte celule pe care nu le-am scris niciodată, numerele 255 sunt stocate.
Pasul 4
Pentru a scrie numere și șiruri în virgulă mobilă, utilizați metoda EEPROM.put () și pentru a citi, utilizați EEPROM.get ().
În procedura setup (), scriem mai întâi numărul virgulă mobilă f. Apoi ne deplasăm după numărul de celule de memorie pe care le ocupă tipul float și scriem un șir de caractere cu o capacitate de 20 de celule.
În procedura loop () vom citi toate celulele de memorie și vom încerca să le decriptăm mai întâi ca tip „float”, apoi ca tip „char” și să scoatem rezultatul la portul serial.
Puteți vedea că valoarea din celulele 0 până la 3 a fost corect definită ca un număr în virgulă mobilă și începând cu a 4-a - ca un șir.
Valorile rezultate ovf (depășire) și nan (nu un număr) indică faptul că numărul nu poate fi convertit corect într-un număr cu virgulă mobilă. Dacă știți exact ce tip de date ocupă celulele de memorie, atunci nu veți avea probleme.
Pasul 5
O caracteristică foarte convenabilă este de a face referire la celulele de memorie ca elemente ale unei matrice EEPROM. În această schiță, în procedura setup (), vom scrie mai întâi datele în primii 4 octeți, iar în procedura loop (), în fiecare minut vom citi datele din toate celulele și le vom scoate în portul serial.