Kaip Atsikratyti Kontakto Atšokimo, Kai Jungiate Mygtuką Prie „Arduino“

Turinys:

Kaip Atsikratyti Kontakto Atšokimo, Kai Jungiate Mygtuką Prie „Arduino“
Kaip Atsikratyti Kontakto Atšokimo, Kai Jungiate Mygtuką Prie „Arduino“

Video: Kaip Atsikratyti Kontakto Atšokimo, Kai Jungiate Mygtuką Prie „Arduino“

Video: Kaip Atsikratyti Kontakto Atšokimo, Kai Jungiate Mygtuką Prie „Arduino“
Video: Arduino Button Debounce Tutorial 2024, Lapkritis
Anonim

Mes jau apžvelgėme mygtuko prijungimą prie „Arduino“ir palietėme „atšokusių“kontaktų klausimą. Tai labai erzinantis reiškinys, sukeliantis pasikartojančius mygtukų paspaudimus ir apsunkinantis programinį mygtuko paspaudimų valdymą. Pakalbėkime apie tai, kaip atsikratyti kontaktinio atšokimo.

Kontaktinio atšokimo efektas
Kontaktinio atšokimo efektas

Būtinas

  • - Arduino;
  • - takto mygtukas;
  • - rezistorius, kurio vardinė vertė yra 10 kOhm;
  • - Šviesos diodas;
  • - jungiamieji laidai.

Nurodymai

1 žingsnis

Kontaktinis atšokimas yra dažnas mechaninių jungiklių, mygtukų, perjungiklių ir relių reiškinys. Dėl to, kad kontaktai dažniausiai būna iš elastingų metalų ir lydinių, fiziškai užsidarę, jie ne iš karto sukuria patikimą ryšį. Per trumpą laiką kontaktai kelis kartus užsidaro ir atstumia vienas kitą. Todėl elektros srovė pastoviosios būsenos vertę įgauna ne akimirksniu, o po nuosmukių ir nuosmukių. Šio trumpalaikio poveikio trukmė priklauso nuo kontaktinės medžiagos, dydžio ir dizaino. Paveikslėlyje parodyta tipinė oscilograma, kai takto mygtuko kontaktai yra uždaryti. Galima pastebėti, kad laikas nuo perėjimo prie pastovios būsenos yra keli milisekundės. Tai vadinama „atšokimu“.

Šis efektas nepastebimas elektros grandinėse, skirtose apšvietimui, varikliams ar kitiems inerciniams jutikliams ir prietaisams valdyti. Tačiau grandinėse, kuriose greitai skaitoma ir apdorojama informacija (kai dažniai yra tos pačios eilės, kaip ir „atšokimo“impulsai, arba didesni), tai yra problema. Visų pirma, „Arduino UNO“, veikiantis 16 MHz dažniu, puikiai gaudo kontaktinį atšokimą, priimdamas vienetų ir nulių seką, o ne vieną jungiklį nuo 0 iki 1.

Kontaktų atšokimas paspaudus mygtuką
Kontaktų atšokimas paspaudus mygtuką

2 žingsnis

Pažiūrėkime, kaip kontakto atšokimas veikia teisingą grandinės veikimą. Prijunkime laikrodžio mygtuką prie „Arduino“naudodami ištraukiamą rezistoriaus grandinę. Paspaudę mygtuką, mes apšviesime šviesos diodą ir paliksime jį įjungti, kol mygtuką dar kartą paspausite. Aiškumo dėlei prie skaitmeninio kaiščio 13 prijungiame išorinį šviesos diodą, nors įmontuoto galima atsisakyti.

Mygtuko prijungimas prie „Arduino“naudojant prisitraukimo rezistoriaus grandinę
Mygtuko prijungimas prie „Arduino“naudojant prisitraukimo rezistoriaus grandinę

3 žingsnis

Pirmas dalykas, kuris ateina į šią užduotį:

- prisiminti ankstesnę mygtuko būseną;

- palyginti su dabartine būkle;

- jei būsena pasikeitė, tada mes keičiame šviesos diodo būseną.

Parašykime tokį eskizą ir įkelkime jį į „Arduino“atmintį.

Įjungus grandinę, iškart matomas kontakto atšokimo poveikis. Tai pasireiškia tuo, kad šviesos diodas neužsidega iškart paspaudus mygtuką arba užsidega ir tada užgęsta, arba neužgęsta iškart paspaudus mygtuką, bet lieka įjungtas. Apskritai grandinė neveikia stabiliai. Ir jei užduotis su šviesos diodo įjungimu tai nėra taip kritiška, tai kitoms, rimtesnėms užduotims, tai tiesiog nepriimtina.

Apdorojimo mygtuko paspaudimo eskizas, neatsižvelgiant į kontakto atmetimą
Apdorojimo mygtuko paspaudimo eskizas, neatsižvelgiant į kontakto atmetimą

4 žingsnis

Bandysime taisyti situaciją. Mes žinome, kad kontaktų atšokimas įvyksta per kelias milisekundes po kontakto uždarymo. Palaukime, tarkime, 5ms pakeitus mygtuko būseną. Šis laikas žmogui yra beveik akimirksnis, o žmogaus mygtuko paspaudimas paprastai užtrunka daug ilgiau - keliasdešimt milisekundžių. Ir „Arduino“puikiai veikia tokiais trumpais laikotarpiais, ir šie 5 ms leis jam nutraukti kontaktų atmetimą paspaudus mygtuką.

Šiame eskize mes paskelbsime debounce () procedūrą (angliškai „bounce“yra tiesiog „bounce“, priešdėlis „de“reiškia atvirkštinį procesą), į kurio įvestį mes pateikiame ankstesnę mygtuko būseną. Jei mygtuko paspaudimas trunka ilgiau nei 5 msek, tai tikrai yra paspaudimas.

Aptikdami spaudą, mes keičiame šviesos diodo būseną.

Įkelkite eskizą į „Arduino“lentą. Dabar viskas yra daug geriau! Mygtukas veikia be klaidų, paspaudus šviesos diodas keičia būseną, kaip norėjome.

Mygtuko paspaudimo apdorojimo eskizas, atsižvelgiant į kontakto atmetimą
Mygtuko paspaudimo apdorojimo eskizas, atsižvelgiant į kontakto atmetimą

5 žingsnis

Panašų funkcionalumą teikia specialios bibliotekos, tokios kaip „Bounce2“biblioteka. Galite atsisiųsti ją iš nuorodos, esančios skiltyje „Šaltiniai“, arba svetainėje https://github.com/thomasfredericks/Bounce2. Norėdami įdiegti biblioteką, įdėkite ją į „Arduino“kūrimo aplinkos bibliotekų katalogą ir iš naujo paleiskite IDE.

„Bounce2“bibliotekoje yra šie metodai:

Bounce () - objekto „Bounce“inicijavimas;

void interval (ms) - nustato uždelsimo laiką milisekundėmis;

void attach (PIN kodas) - nustato kaištį, prie kurio prijungtas mygtukas;

int update () - atnaujina objektą ir grąžina true, jei PIN kodas pasikeitė, o klaidinga kitaip;

int skaityti () - nuskaito naują kaiščio būseną.

Perrašykime savo eskizą naudodamiesi biblioteka. Taip pat galite prisiminti ir palyginti ankstesnę mygtuko būseną su dabartine, tačiau supaprastinkime algoritmą. Paspaudus mygtuką, mes suskaičiuosime paspaudimus, o kiekvienas nelyginis paspaudimas įjungs šviesos diodą, o kiekvienas lyginis paspaudimas jį išjungs. Šis eskizas atrodo glaustas, lengvai skaitomas ir lengvai naudojamas.

Rekomenduojamas: