Bodi za Arduino zina aina kadhaa za kumbukumbu. Kwanza, ni tuli ya RAM (kumbukumbu ya ufikiaji wa nasibu), ambayo hutumiwa kuhifadhi anuwai wakati wa utekelezaji wa programu. Pili, ni kumbukumbu ndogo ambayo huhifadhi michoro uliyoandika. Na tatu, ni EEPROM ambayo inaweza kutumika kuhifadhi habari kabisa. Aina ya kwanza ya kumbukumbu ni tete, inapoteza habari zote baada ya kuwasha tena Arduino. Aina mbili za pili za habari ya duka ya kumbukumbu hadi itakapowekwa tena na mpya, hata baada ya umeme kuzimwa. Aina ya mwisho ya kumbukumbu - EEPROM - inaruhusu data kuandikwa, kuhifadhiwa na kusoma kama inahitajika. Tutazingatia kumbukumbu hii sasa.
Muhimu
- - Arduino;
- - kompyuta.
Maagizo
Hatua ya 1
EEPROM inasimama kwa Kumbukumbu ya Kusoma-Inayoweza Kusambazwa kwa Umeme, i.e. kumbukumbu inayoweza kusomeka kwa umeme. Takwimu kwenye kumbukumbu hii zinaweza kuhifadhiwa kwa makumi ya miaka baada ya umeme kuzimwa. Idadi ya mizunguko ya kuandika upya iko kwa utaratibu wa mara milioni kadhaa.
Kiasi cha kumbukumbu ya EEPROM huko Arduino ni mdogo: kwa bodi zinazotegemea mdhibiti mdogo wa ATmega328 (kwa mfano, Arduino UNO na Nano), kiwango cha kumbukumbu ni 1 KB, kwa bodi za ATmega168 na ATmega8 - ka 512, kwa ATmega2560 na ATmega1280 - 4 KB.
Hatua ya 2
Kufanya kazi na EEPROM ya Arduino, maktaba maalum imeandikwa, ambayo imejumuishwa katika Arduino IDE kwa chaguo-msingi. Maktaba ina huduma zifuatazo.
soma (anwani) - inasoma 1 ka kutoka EEPROM; anwani - anwani ambayo data inasomwa kutoka (seli kuanzia 0);
andika (anwani, thamani) - anaandika thamani ya thamani (1 ka, nambari kutoka 0 hadi 255) kwenye kumbukumbu kwenye anwani ya anwani;
sasisha (anwani, thamani) - inachukua nafasi ya nambari ikiwa anwani yake ya zamani inatofautiana na ile mpya;
pata (anwani, data) - inasoma data ya aina maalum kutoka kwa kumbukumbu kwenye anwani;
weka (anwani, data) - anaandika data ya aina maalum kwa kumbukumbu kwenye anwani;
[Anwani] ya EEPROM - hukuruhusu kutumia kitambulisho cha "EEPROM" kama safu ya kuandika data na kusoma kutoka kwa kumbukumbu.
Kutumia maktaba kwenye mchoro, tunaijumuisha na maagizo ya # pamoja na EEPROM.h.
Hatua ya 3
Wacha tuandike nambari mbili kwenda EEPROM na kisha tusome kutoka EEPROM na tuzipeleke kwenye bandari ya serial.
Hakuna shida na nambari kutoka 0 hadi 255, wanachukua tu 1 ya kumbukumbu na imeandikwa kwa eneo unalotaka kwa kutumia kazi ya EEPROM.write ().
Ikiwa nambari ni kubwa kuliko 255, basi kutumia waendeshaji highByte () na lowByte () lazima igawanywe kwa ka na kila ka inapaswa kuandikiwa seli yake mwenyewe. Nambari ya juu katika kesi hii ni 65536 (au 2 ^ 16).
Tazama, mfuatiliaji wa bandari ya serial kwenye seli 0 huonyesha tu nambari chini ya 255. Katika seli 1 na 2, idadi kubwa 789 imehifadhiwa. (yaani 789 = 3 * 256 + 21). Kukusanya tena idadi kubwa, iliyotengwa kwa ka, kuna neno () kazi: int val = neno (hi, chini), ambapo hi na chini ni maadili ya kaa za juu na za chini.
Katika seli zingine zote ambazo hatujawahi kuandika, namba 255 zinahifadhiwa.
Hatua ya 4
Kuandika nambari za kuelea na kamba, tumia njia ya EEPROM.put (), na kusoma, tumia EEPROM.get ().
Katika utaratibu wa kuanzisha (), tunaandika kwanza nambari ya kuelea f. Kisha tunasonga na idadi ya seli za kumbukumbu ambazo aina ya kuelea inachukua, na andika kamba ya char yenye uwezo wa seli 20.
Katika utaratibu wa kitanzi () tutasoma seli zote za kumbukumbu na kujaribu kuzisimbua kwanza kama aina ya "kuelea", na kisha kama aina ya "char", na kutoa matokeo kwenye bandari ya serial.
Unaweza kuona kwamba thamani katika seli 0 hadi 3 ilifafanuliwa kwa usahihi kama nambari ya mahali paelea, na kuanzia ya 4 - kama kamba.
Thamani zinazosababisha ovf (kufurika) na nan (sio nambari) zinaonyesha kwamba nambari haiwezi kubadilishwa kwa usahihi kuwa nambari ya kuelea. Ikiwa unajua ni aina gani ya data ambayo seli za kumbukumbu zinachukua, basi hautakuwa na shida yoyote.
Hatua ya 5
Kipengele rahisi sana ni kutaja seli za kumbukumbu kama vitu vya safu ya EEPROM. Katika mchoro huu, katika utaratibu wa kuanzisha (), kwanza tutaandika data ndani ya ka 4, na kwa utaratibu wa kitanzi, kila dakika tutasoma data kutoka kwa seli zote na kuzipeleka kwenye bandari ya serial.