Mēs jau esam izskatījuši pogas pievienošanu Arduino un pieskārušies kontaktpersonu "atlēcieniem". Šī ir ļoti kaitinoša parādība, kas izraisa atkārtotu pogu nospiešanu un apgrūtina programmētu pogu klikšķu apstrādi. Parunāsim par to, kā atbrīvoties no kontakta atlēciena.
Nepieciešams
- - Arduino;
- - takta poga;
- - rezistors ar nominālo vērtību 10 kOhm;
- - Gaismas diode;
- - savienojošie vadi.
Instrukcijas
1. solis
Kontaktu atlēciens ir izplatīta parādība mehāniskajos slēdžos, spiedpogās, pārslēgšanas slēdžos un relejos. Sakarā ar to, ka kontaktus parasti veido no metāliem un sakausējumiem, kuriem ir elastība, fiziski aizverot, tie nekavējoties nenodrošina uzticamu savienojumu. Īsā laika posmā kontakti vairākas reizes aizveras un viens otru atgrūž. Rezultātā elektriskā strāva iegūst līdzsvara stāvokli nevis uzreiz, bet gan pēc vairākiem kāpumiem un kritumiem. Šīs pārejošās iedarbības ilgums ir atkarīgs no kontakta materiāla, lieluma un dizaina. Attēlā parādīta tipiska oscilogramma, kad takta pogas kontakti ir aizvērti. Var redzēt, ka laiks no pārejas brīža uz līdzsvara stāvokli ir vairākas milisekundes. To sauc par "atlēcienu".
Šis efekts nav pamanāms elektriskās ķēdēs, lai kontrolētu apgaismojumu, motorus vai citus inerciālos sensorus un ierīces. Bet ķēdēs, kur notiek ātra informācijas nolasīšana un apstrāde (kur frekvences ir tādā pašā secībā kā "atlēciena" impulsi vai augstākas), tā ir problēma. Jo īpaši Arduino UNO, kas darbojas ar 16 MHz frekvenci, lieliski uztver kontakta atlēcienu, pieņemot vienu un nulles secību, nevis vienu slēdzi no 0 līdz 1.
2. solis
Apskatīsim, kā kontakta atlēciens ietekmē pareizu ķēdes darbību. Savienosim pulksteņa pogu ar Arduino, izmantojot nolaižamo rezistora ķēdi. Nospiežot pogu, mēs iedegsim gaismas diode un atstāsim to ieslēgtu, līdz poga tiek nospiesta vēlreiz. Skaidrības labad mēs pievienojam ārējo gaismas diodi digitālajai tapai 13, lai gan iebūvēto var iztikt.
3. solis
Lai veiktu šo uzdevumu, vispirms nāk prātā:
- atcerieties pogas iepriekšējo stāvokli;
- salīdzināt ar pašreizējo stāvokli;
- ja stāvoklis ir mainījies, tad mēs mainām LED stāvokli.
Uzrakstīsim šādu skici un ielādēsim to Arduino atmiņā.
Kad ķēde ir ieslēgta, kontakta atlēciena efekts ir uzreiz redzams. Tas izpaužas ar to, ka gaismas diode neiedegas uzreiz pēc pogas nospiešanas, vai iedegas un pēc tam nodziest, vai neizslēdzas uzreiz pēc pogas nospiešanas, bet paliek ieslēgta. Parasti ķēde nedarbojas stabili. Un, ja uzdevumam ar gaismas diodes ieslēgšanu tas nav tik kritiski, tad citiem, nopietnākiem uzdevumiem tas ir vienkārši nepieņemami.
4. solis
Mēs centīsimies salabot situāciju. Mēs zinām, ka kontakta atlēciens notiek dažu milisekunžu laikā pēc kontakta slēgšanas. Gaidīsim, teiksim, 5 ms pēc pogas stāvokļa maiņas. Šis laiks cilvēkam ir gandrīz mirklis, un, nospiežot pogu, cilvēks parasti aizņem daudz ilgāku laiku - vairākus desmitus milisekunžu. Arduino lieliski darbojas tik īsos laika periodos, un šie 5 ms ļaus tam pārtraukt kontaktu atlēcienu no pogas nospiešanas.
Šajā skicē mēs paziņosim par atlēciena () procedūru (angļu valodā "atlēciens" ir tikai "atlēciens", prefikss "de" nozīmē apgriezto procesu), kuras ievadam mēs piegādājam pogas iepriekšējo stāvokli. Ja pogas nospiešana ilgst vairāk nekā 5 ms, tad tā patiešām ir nospiešana.
Atklājot presi, mēs mainām gaismas diodes stāvokli.
Augšupielādējiet skici uz Arduino dēļa. Tagad viss ir daudz labāk! Poga darbojas bez kļūdām, nospiežot, gaismas diode maina stāvokli, kā mēs vēlējāmies.
5. solis
Līdzīgu funkcionalitāti nodrošina īpašas bibliotēkas, piemēram, Bounce2 bibliotēka. To var lejupielādēt no saites sadaļā “Avoti” vai vietnē https://github.com/thomasfredericks/Bounce2. Lai instalētu bibliotēku, ievietojiet to Arduino izstrādes vides bibliotēku direktorijā un restartējiet IDE.
Bibliotēkā "Bounce2" ir šādas metodes:
Bounce () - objekta "Bounce" inicializēšana;
void interval (ms) - iestata kavēšanās laiku milisekundēs;
void attach (piespraudes numurs) - iestata tapu, kurai pievienota poga;
int update () - atjaunina objektu un atgriež vērtību true, ja tapas statuss ir mainījies, un citādi - false;
int lasīt () - nolasa tapas jauno stāvokli.
Pārrakstīsim savu skici, izmantojot bibliotēku. Varat arī atcerēties un salīdzināt pogas iepriekšējo stāvokli ar pašreizējo, taču vienkāršosim algoritmu. Nospiežot pogu, mēs saskaitīsim preses, un katrs nepāra spiediens ieslēgs LED, un katrs vienmērīgais nospiedums to izslēgs. Šī skice izskatās kodolīga, viegli lasāma un ērti lietojama.