Arduino dēļiem ir vairāki atmiņas veidi. Pirmkārt, tā ir statiskā RAM (brīvpiekļuves atmiņa), kas tiek izmantota mainīgo saglabāšanai programmas izpildes laikā. Otrkārt, tā ir zibatmiņa, kurā glabājas jūsu uzrakstītās skices. Treškārt, tas ir EEPROM, ko var izmantot, lai pastāvīgi saglabātu informāciju. Pirmais atmiņas veids ir nepastāvīgs, pēc Arduino restartēšanas tā zaudē visu informāciju. Divi otrie atmiņas veidi glabā informāciju, līdz tā tiek pārrakstīta ar jaunu pat pēc strāvas izslēgšanas. Pēdējais atmiņas veids - EEPROM - ļauj datus rakstīt, saglabāt un lasīt pēc nepieciešamības. Tagad mēs apsvērsim šo atmiņu.
Nepieciešams
- - Arduino;
- - dators.
Instrukcijas
1. solis
EEPROM nozīmē elektriski izdzēšamu programmējamu tikai lasāmatmiņu, t.i. elektriski izdzēšama tikai lasāma atmiņa. Datus šajā atmiņā var uzglabāt desmitiem gadu pēc strāvas izslēgšanas. Pārrakstīšanas ciklu skaits ir aptuveni miljons reižu.
EEPROM atmiņas apjoms Arduino ir diezgan ierobežots: plāksnēm, kuru pamatā ir mikrokontrolleris ATmega328 (piemēram, Arduino UNO un Nano), atmiņas apjoms ir 1 KB, ATmega168 un ATmega8 dēļiem - 512 baiti, ATmega2560 un ATmega1280 - 4 KB.
2. solis
Lai strādātu ar EEPROM for Arduino, ir uzrakstīta īpaša bibliotēka, kas pēc noklusējuma ir iekļauta Arduino IDE. Bibliotēkā ir šādas funkcijas.
lasīt (adrese) - nolasa 1 baitu no EEPROM; adrese - adrese, no kuras dati tiek nolasīti (šūna sākas ar 0);
rakstīt (adrese, vērtība) - vērtības vērtību (1 baits, skaitlis no 0 līdz 255) ieraksta atmiņā adreses adresē;
atjaunināt (adrese, vērtība) - aizstāj vērtību adresē, ja tās vecais saturs atšķiras no jaunā;
iegūt (adrese, dati) - nolasa noteikta veida datus no atmiņas adresē;
put (adrese, dati) - ieraksta noteikta veida datus atmiņā adresē;
EEPROM [adrese] - ļauj izmantot identifikatoru "EEPROM" kā masīvu, lai ierakstītu datus un lasītu no atmiņas.
Lai skicē izmantotu bibliotēku, mēs to iekļaujam direktīvā #include EEPROM.h.
3. solis
Uzrakstīsim divus veselus skaitļus EEPROM un pēc tam nolasīsim tos no EEPROM un izvadīsim seriālajā portā.
Ar skaitļiem no 0 līdz 255 problēmu nav, tie aizņem tikai 1 baitu atmiņas un tiek ierakstīti vēlamajā vietā, izmantojot funkciju EEPROM.write ().
Ja skaitlis ir lielāks par 255, tad, izmantojot operatorus highByte () un lowByte (), tas ir jāsadala ar baitiem un katrs baits ir jāieraksta savā šūnā. Maksimālais skaits šajā gadījumā ir 65536 (vai 2 ^ 16).
Paskaties, sērijas porta monitors šūnā 0 vienkārši parāda skaitli, kas mazāks par 255. 1. un 2. šūnā tiek glabāts liels skaits 789. Šajā gadījumā 1. šūna saglabā pārpildes koeficientu 3, bet 2. šūna - trūkstošo skaitli 21 (ti, 789 = 3 * 256 + 21). Lai saliktu lielu skaitu baitos parsētu, ir vārds () funkcija: int val = vārds (hi, low), kur hi un low ir augstā un zemā baita vērtības.
Visās citās šūnās, kuras mēs nekad neesam pierakstījuši, tiek glabāti skaitļi 255.
4. solis
Lai rakstītu peldošā komata numurus un virknes, izmantojiet metodi EEPROM.put (), bet lasīšanai izmantojiet EEPROM.get ().
Iestatīšanas () procedūrā vispirms uzrakstām peldošā komata skaitli f. Tad mēs pārvietojamies pēc atmiņas šūnu skaita, ko aizņem pludiņa tips, un uzrakstām char virkni ar 20 šūnu ietilpību.
Procedūrā loop () mēs nolasīsim visas atmiņas šūnas un mēģināsim tās atšifrēt vispirms kā “pludiņa” un pēc tam kā “char” veidu, un rezultātu izvadīsim uz seriālo portu.
Var redzēt, ka vērtība šūnās no 0 līdz 3 tika pareizi definēta kā peldošā komata skaitlis, un, sākot no 4. - kā virkne.
Rezultātā iegūtās vērtības ovf (pārplūde) un nan (nevis skaitlis) norāda, ka skaitli nevar pareizi pārveidot par peldošā komata skaitli. Ja jūs precīzi zināt, kāda veida datus atmiņas šūnas aizņem, tad jums nebūs problēmu.
5. solis
Ļoti ērta funkcija ir atsaukties uz atmiņas šūnām kā EEPROM masīva elementiem. Šajā skicē setup () procedūrā mēs vispirms ierakstīsim datus pirmajos 4 baitos, un loop () procedūrā katru minūti mēs nolasīsim datus no visām šūnām un izvadīsim tos seriālajā portā.