Biz allaqachon tugmachani Arduino bilan bog'lashni ko'rib chiqdik va kontaktlarning zanglashiga oid masalaga to'xtaldik. Bu juda zerikarli hodisa, bu tugmachani qayta-qayta bosishini keltirib chiqaradi va tugmachani bosish bilan dasturiy ishlov berishni qiyinlashtiradi. Keling, kontakt pog'onasidan qanday qutulish haqida gapiraylik.
Kerakli
- - Arduino;
- - teginish tugmasi;
- - nominal qiymati 10 kOm bo'lgan qarshilik;
- - yorug'lik chiqaradigan diod;
- - simlarni ulash.
Ko'rsatmalar
1-qadam
Kontakt pog'onasi mexanik kalitlarda, tugmachalarda, almashtirish tugmachalarida va o'rni holatida keng tarqalgan hodisa. Kontaktlar odatda egiluvchanlikka ega bo'lgan metall va qotishmalardan yasalganligi sababli, jismonan yopilganda ular darhol ishonchli aloqani o'rnatmaydi. Qisqa vaqt ichida kontaktlar bir necha marta yopiladi va bir-birlarini qaytaradi. Natijada, elektr toki bir zumda emas, balki bir qator ko'tarilish va pasayishdan so'ng barqaror holat qiymatini oladi. Ushbu vaqtinchalik ta'sirning davomiyligi aloqa materialiga, o'lchamiga va dizayniga bog'liq. Rasmda teg tugmachasining kontaktlari yopilganda odatdagi osillogramma ko'rsatilgan. Ko'rinib turibdiki, barqaror holatga o'tgan paytdan boshlab bir necha millisekundlarni tashkil etadi. Bunga "sakrash" deyiladi.
Ushbu effekt yorug'lik, dvigatellar yoki boshqa inertsional sensorlar va qurilmalarni boshqarish uchun elektr zanjirlarida sezilmaydi. Ammo ma'lumotni tez o'qish va qayta ishlash mavjud bo'lgan davrlarda (chastotalar "pog'ona" impulslari bilan bir xil tartibda yoki undan yuqori), bu muammo. Xususan, 16 MGts chastotada ishlaydigan Arduino UNO, kontaktlarning zanglashiga olib borishda juda yaxshi, bitta 0 dan 1 gacha kalit o'rniga bitta va nolga teng ketma-ketlikni qabul qiladi.
2-qadam
Keling, kontaktlarning zanglashiga olib o'tish davri to'g'ri ishlashiga qanday ta'sir qilishini ko'rib chiqamiz. Pastga tushadigan qarshilik sxemasi yordamida soat tugmachasini Arduinoga ulaymiz. Tugmani bosish orqali biz LEDni yoqamiz va tugma yana bosilguncha uni qoldiramiz. Aniqlik uchun biz tashqi LEDni raqamli pin 13 ga ulaymiz, ammo ichki qismdan foydalanish mumkin.
3-qadam
Ushbu vazifani bajarish uchun birinchi navbatda xayolga keladigan narsa:
- tugmachaning oldingi holatini eslang;
- hozirgi holat bilan taqqoslash;
- agar holat o'zgargan bo'lsa, biz LED holatini o'zgartiramiz.
Keling, shunday eskizni yozamiz va Arduino xotirasiga yuklaymiz.
O'chirish yoqilganda, kontaktlarning zanglashiga ta'siri darhol ko'rinadi. Bu LED tugmachani bosgandan so'ng darhol yonib ketmasligi yoki yonib, keyin o'chib ketishi yoki tugmachani bosgandan so'ng darhol o'chirilmasligi, lekin yonib turishi bilan o'zini namoyon qiladi. Umuman olganda, sxema barqaror ishlamaydi. Va agar LEDni yoqish uchun bu juda muhim bo'lmasa, unda boshqa jiddiy vazifalar uchun bu shunchaki qabul qilinishi mumkin emas.
4-qadam
Vaziyatni to'g'irlashga harakat qilamiz. Biz bilamizki, kontaktning sakrashi kontakt yopilgandan keyin bir necha millisekundalar ichida sodir bo'ladi. Aytaylik, tugma holatini o'zgartirgandan keyin 5ms kutamiz. Biror kishi uchun bu vaqt deyarli bir lahzaga to'g'ri keladi va odamning tugmachasini bosish odatda ancha uzoq davom etadi - bir necha o'n millisekundlar. Va Arduino qisqa vaqt ichida juda yaxshi ishlaydi va bu 5ms tugmachani bosish orqali kontaktlarning zanglashiga olib chiqishiga imkon beradi.
Ushbu eskizda biz debounce () protsedurasini e'lon qilamiz (ingliz tilida "pog'ona" shunchaki "pog'ona", "de" prefiksi teskari jarayonni anglatadi), biz unga tugmaning oldingi holatini etkazib beramiz. Agar tugmachani bosish 5 msekdan ko'proq davom etsa, demak, bu haqiqatan ham press.
Matbuotni aniqlab, biz LED holatini o'zgartiramiz.
Eskizni Arduino doskasiga yuklang. Hozir hammasi yaxshi! Tugma muvaffaqiyatsiz ishlaydi, bosilganda LED biz xohlagancha holatini o'zgartiradi.
5-qadam
Shunga o'xshash funktsiyalar Bounce2 kutubxonasi kabi maxsus kutubxonalar tomonidan ta'minlanadi. Siz uni "Manbalar" bo'limidagi havoladan yoki https://github.com/thomasfredericks/Bounce2 veb-saytidan yuklab olishingiz mumkin. Kutubxonani o'rnatish uchun uni Arduino rivojlanish muhitidagi kutubxonalar katalogiga joylashtiring va IDE-ni qayta yoqing.
"Bounce2" kutubxonasida quyidagi usullar mavjud:
Bounce () - "Bounce" ob'ektini ishga tushirish;
void interval (ms) - kechikish vaqtini millisekundlarda belgilaydi;
void biriktirma (pin raqami) - tugma ulangan pinni o'rnatadi;
int update () - ob'ektni yangilaydi va agar pin holati o'zgargan bo'lsa true, aks holda false;
int read () - pinning yangi holatini o'qiydi.
Kutubxonadan foydalanib eskizimizni qayta yozamiz. Bundan tashqari, tugmachaning o'tgan holatini hozirgi holati bilan eslab, solishtirishingiz mumkin, ammo keling algoritmni soddalashtiramiz. Tugma bosilganda biz presslarni hisoblaymiz va har bir g'alati bosish LEDni yoqadi va har bir juft bosish uni o'chiradi. Ushbu eskiz ixcham, o'qilishi oson va foydalanishga qulay ko'rinadi.