Arduino տախտակներն ունեն մի քանի տեսակի հիշողություն: Նախ, դա ստատիկ RAM է (պատահական մուտքի հիշողություն), որն օգտագործվում է ծրագրի կատարման ընթացքում փոփոխականները պահելու համար: Երկրորդ, դա ֆլեշ հիշողությունն է, որը պահպանում է ձեր գրած ուրվագծերը: Եվ երրորդ ՝ դա EEPROM է, որը կարող է օգտագործվել տեղեկատվությունը մշտապես պահելու համար: Հիշողության առաջին տեսակն անկայուն է, այն կորցնում է ամբողջ տեղեկատվությունը Arduino- ն վերագործարկելուց հետո: Հիշողության երկրորդ երկու տեսակները պահպանում են տեղեկատվությունը, մինչև այն վերագրվում է նորով, նույնիսկ հոսանքն անջատելուց հետո: Հիշողության վերջին տեսակը ՝ EEPROM- ը, թույլ է տալիս գրել տվյալները, պահպանել և կարդալ ըստ անհրաժեշտության: Մենք հիմա կքննարկենք այս հիշողությունը:
Անհրաժեշտ է
- - Arduino;
- - համակարգիչ:
Հրահանգներ
Քայլ 1
EEPROM- ը նշանակում է էլեկտրականորեն ջնջվող ծրագրավորվող միայն կարդալու հիշողություն, այսինքն. էլեկտրականորեն ջնջվող միայն կարդալու հիշողություն: Այս հիշողության մեջ եղած տվյալները կարող են պահվել տասնյակ տարիներ ՝ հոսանքն անջատելուց հետո: Վերաշարադրման ցիկլերի քանակը մի քանի միլիոն անգամ է:
Arduino- ում EEPROM հիշողության քանակը բավականին սահմանափակ է. ATmega328 միկրոհամակարգչի վրա հիմնված տախտակների համար (օրինակ ՝ Arduino UNO և Nano) հիշողության ծավալը 1 ԿԲ է, ATmega168 և ATmega8 տախտակների համար ՝ 512 բայթ, ATmega2560 և ATmega1280 - 4 ԿԲ
Քայլ 2
Arduino- ի համար EEPROM- ի հետ աշխատելու համար գրվել է հատուկ գրադարան, որը լռելյայն ներառված է Arduino IDE- ի մեջ: Գրադարանը պարունակում է հետևյալ հատկությունները.
կարդալ (հասցե) - կարդում է 1 բայթ EEPROM- ից; հասցե - հասցե, որտեղից ընթերցվում են տվյալները (բջիջը սկսվում է 0-ից);
գրել (հասցե, արժեք) - գրում է արժեքի արժեքը (1 բայթ, համարը 0-ից 255) հիշողությանը հասցեի հասցեում.
թարմացում (հասցե, արժեք) - փոխարինում է հասցեի արժեքը, եթե դրա հին բովանդակությունը տարբերվում է նորից.
ստանալ (հասցե, տվյալներ) - կարդում է նշված տիպի տվյալները հիշողությունից հասցեում;
տեղադրել (հասցե, տվյալներ) - նշված հասցեի հիշողությանը գրում է նշված տեսակի տվյալները.
EEPROM [հասցե] - թույլ է տալիս օգտագործել «EEPROM» նույնացուցիչը որպես զանգված ՝ տվյալները գրելու և հիշողության մեջ կարդալու համար:
Էսքիզում գրադարանն օգտագործելու համար այն ներառում ենք # ներառել 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 = բառ (hi, ցածր), որտեղ hi և ցածր բարձր և ցածր բայթերի արժեքներն են:
Մնացած բոլոր բջիջներում, որոնք մենք երբեք չենք գրել, 255 համարները պահվում են:
Քայլ 4
Լողացող կետերի համարներ և տողեր գրելու համար օգտագործեք EEPROM.put () մեթոդը, իսկ կարդալու համար օգտագործեք EEPROM.get ():
Կարգավորման () կարգով մենք նախ գրում ենք լողացող կետի թիվը f: Հետո շարժվում ենք հիշողության բջիջների քանակով, որոնք լողացող տիպը զբաղեցնում է, և գրում ենք 20 բջիջ տարողությամբ ածուխի տող:
Օղակի () պրոցեդուրայում մենք կընթերցենք հիշողության բոլոր բջիջները և կփորձենք վերծանել դրանք նախ որպես «բոց» տիպ, այնուհետև որպես «քար» տիպ և արդյունքը դուրս բերել սերիական պորտ:
Դուք կարող եք տեսնել, որ 0-ից 3-ի բջիջներում արժեքը ճիշտ է սահմանվել որպես լողացող կետի թիվ, իսկ 4-ից սկսած `որպես լար:
Արդյունքում ստացվող ovf (գերբեռնվածություն) և nan (ոչ թիվ) արժեքները ցույց են տալիս, որ թիվը չի կարող ճիշտ փոխարկվել լողացող կետի համարի: Եթե հստակ գիտեք, թե տվյալների որ տեսակն է գրավում հիշողության բջիջները, ապա խնդիրներ չեք ունենա:
Քայլ 5
Շատ հարմար առանձնահատկությունն այն է, որ հիշողության բջիջները հիշատակվեն որպես EEPROM զանգվածի տարրեր: Այս ուրվագծում, կարգավորման () կարգով, մենք նախ տվյալները կգրենք առաջին 4 բայթերի մեջ, իսկ օղակի () կարգով ՝ ամեն րոպե մենք կկարդանք բոլոր բջիջներից ստացված տվյալները և դրանք դուրս կգանք սերիական նավահանգիստ: