Arduino тақталарында бірнеше типтегі жады бар. Біріншіден, бұл статикалық жедел жады (жедел жад), ол бағдарламаны орындау кезінде айнымалыларды сақтау үшін қолданылады. Екіншіден, бұл сіз жазған эскиздерді сақтайтын флэш-жады. Үшіншіден, бұл ақпаратты тұрақты сақтауға болатын EEPROM. Жадтың бірінші типі тұрақты, ол Arduino қайта жүктелгеннен кейін барлық ақпаратты жоғалтады. Жадтың екінші екі түрі ақпаратты қуат өшірілгеннен кейін де жаңасымен жазғанша сақтайды. Жадтың соңғы түрі - EEPROM - деректерді жазуға, сақтауға және қажет болған жағдайда оқуға мүмкіндік береді. Біз бұл жадыны қазір қарастырамыз.
Қажетті
- - Ардуино;
- - компьютер.
Нұсқаулық
1-қадам
EEPROM - электрмен өшірілетін бағдарламаланатын жад, яғни т.с.с. тек оқуға болатын жад. Бұл жадтағы деректерді қуат өшірілгеннен кейін ондаған жыл сақтауға болады. Қайта жазу циклдарының саны бірнеше миллион ретке сәйкес келеді.
Arduino-да EEPROM жадының мөлшері айтарлықтай шектеулі: ATmega328 микроконтроллеріне негізделген тақталар үшін (мысалы, Arduino UNO және Nano), жадының мөлшері 1 КБ, ATmega168 және ATmega8 тақталары үшін - 512 байт, ATmega2560 және ATmega1280 үшін - 4 КБ.
2-қадам
Arduino үшін EEPROM-мен жұмыс істеу үшін Arduino IDE-ге әдепкі бойынша енетін арнайы кітапхана жазылды. Кітапханада келесі мүмкіндіктер бар.
оқу (мекен-жайы) - EEPROM-дан 1 байт оқиды; адрес - мәліметтер оқылатын адрес (0-ден басталатын ұяшық);
жазу (адрес, мән) - мән мәнін (1 байт, 0-ден 255-ке дейін) мекен-жайдағы жадқа жазады;
жаңарту (мекен-жай, мән) - егер ескі мазмұны жаңасынан өзгеше болса, мекен-жайдағы мәнді ауыстырады;
get (мекен-жай, мәліметтер) - көрсетілген типтегі деректерді жадтан мекен-жай бойынша оқиды;
put (мекен-жай, мәліметтер) - көрсетілген типтегі мәліметтерді мекен-жай бойынша жадқа жазады;
EEPROM [мекен-жайы] - мәліметтер жазуға және жадтан оқуға массив ретінде «EEPROM» идентификаторын пайдалануға мүмкіндік береді.
Кітапхананы эскизде пайдалану үшін оны #include EEPROM.h директивасымен бірге қосамыз.
3-қадам
EEPROM-ға екі бүтін сан жазып, содан кейін оларды EEPROM-дан оқып сериялық портқа шығарайық.
0-ден 255-ке дейінгі сандармен проблемалар жоқ, олар тек 1 байт жадты алады және EEPROM.write () функциясы арқылы қажетті орынға жазылады.
Егер сан 255-тен көп болса, онда highByte () және lowByte () операторларын қолдана отырып, оны байттармен бөліп, әр байтты өз ұясына жазу керек. Бұл жағдайда максималды сан - 65536 (немесе 2 ^ 16).
Қараңыз, 0 ұяшығындағы сериялық порт мониторы жай ғана 255-тен аз санды көрсетеді. 1 және 2 ұяшықтарда 789 үлкен саны сақталады, бұл жағдайда 1 ұяшық толып кету факторын 3, ал 2 ұяшықта жетіспейтін 21 нөмірін сақтайды. (яғни 789 = 3 * 256 + 21). Байтқа талданған үлкен санды қайта жинау үшін () функциясы бар: int val = word (hi, low), мұнда hi and low - жоғары және төменгі байттардың мәні.
Біз ешқашан жазбаған барлық басқа ұяшықтарда 255 сандары сақталады.
4-қадам
Жылжымалы нүктелер мен жолдарды жазу үшін EEPROM.put () әдісін, ал оқу үшін EEPROM.get () қолданыңыз.
Setup () процедурасында алдымен f өзгермелі нүктесінің нөмірін жазамыз. Содан кейін біз float типін алатын жад ұяшықтарының саны бойынша жылжып, сыйымдылығы 20 ұяшықтан тұратын char жолын жазамыз.
Цикл () процедурасында біз барлық жад ұяшықтарын оқып, оларды алдымен «float», содан кейін «char» типі ретінде шифрды ашуға тырысамыз және нәтижені сериялық портқа шығарамыз.
0-ден 3-ке дейінгі ұяшықтардағы мән өзгермелі нүкте саны ретінде, ал 4-шіден бастап - жол ретінде дұрыс анықталғанын көруге болады.
Алынған ovf (толып кету) және нан (сан емес) мәндері санды өзгермелі нүкте санына дұрыс ауыстыруға болмайтынын көрсетеді. Егер сіз жад ұяшықтары қандай мәліметтер типін алатындығын нақты білсеңіз, сізде ешқандай қиындықтар болмайды.
5-қадам
Жады ұяшықтарын EEPROM массивінің элементтері ретінде қарастыру өте ыңғайлы. Бұл эскизде setup () процедурасында біз алдымен мәліметтерді алғашқы 4 байтқа жазамыз, ал цикл () процедурасында әр минут сайын барлық ұяшықтардағы мәліметтерді оқып, оларды сериялық портқа шығарамыз.