Kontakti põrge
Seda nimetatakse kontakti põrgatamiseks ja see juhtub siis, kui nupu või lüliti metallkontaktid põrkuvad üksteise vastu, kui seda vajutate. Mikrokontroller on nende põrgatuste ülesvõtmiseks piisavalt kiire ja niipalju kui muudate lülitit mitu korda kuni 10 millisekundi jooksul.
Erinevatel lülititel ja nuppudel on erinev kontakti põrge hulk ja isegi üks lüliti käitub kahe vajutuse korral erinevalt.
Siin on nupule vajutamine, mis on jäädvustatud ulatusele (pilt Maximist):
Kell 2ms / div näeme stabiilset signaali alles 6ms pärast esmast kontakti!
Lahendused
Lisage viivitus
Absoluutne lihtsaim lahendus on lühikese viivituse kehtestamine pärast nupu sisendi lugemist. See hoiab ära koodi, et see ei leia põrkumisi ja kui see jätkub, peaks signaal olema stabiilne.
if (digitalRead (A3) == 0) {// tee siin midagi viivitust (500 );}
Ülalolevas näites viivitan pärast tihvti oleku lugemist 500 ms. Nupp on tavaliselt kõrge, nii et kui ma seda alla vajutan, läheb tihvti olek loogikale 0. Valin selle koodist üles ja teen midagi ning ootan siis enne jätkamist vähemalt 500 ms.
Ilmselt, see kood lihtsalt peatub pooleks sekundiks iga kord, kui vajutate nuppu, mis võib teie rakenduses olla vastuvõetav või mitte. Võite ka viivitust vähendada, sõltuvalt ka teie lüliti kontakti põrkemisajast, kuid mängin seda siin turvaliselt.
Ignoreerimisnupp vajutab üksteisele liiga lähedal
Sarnaselt ülaltoodud lahenduse, kuid tugeva viivituse lisamise asemel kasutate funktsiooni millis ()
, et jälgida, millal lüliti viimati käivitati. Iga kord, kui näete lüliti päästikut, võrdlete seda ajaga ja kui pole piisavalt aega möödas (öelge minu eelmises näites nagu 500 ms), ignoreerite seda.
See lahendab kasutamise vajaduse delay ()
teie koodis.
Lülita väljavõtja IC
On selliseid asju nagu MAX6816, mis on IC, mille panete lüliti ja mikrokontrolleri sisendi vahele. See taunib teie jaoks signaali. Hinnaga 1,62 dollarit @ 1k, te ei kasuta seda tõenäoliselt kunagi.
Muu
Sellele probleemile on palju lahendusi ... Teen seda alati tarkvaras, kuid mõned teised lisage riiv või kondensaator.
Debounce Code - üks postitus nende kõigi juhtimiseks