Cum Să Scapi De Săriturile De Contact Atunci Când Conectezi Un Buton La Arduino

Cuprins:

Cum Să Scapi De Săriturile De Contact Atunci Când Conectezi Un Buton La Arduino
Cum Să Scapi De Săriturile De Contact Atunci Când Conectezi Un Buton La Arduino

Video: Cum Să Scapi De Săriturile De Contact Atunci Când Conectezi Un Buton La Arduino

Video: Cum Să Scapi De Săriturile De Contact Atunci Când Conectezi Un Buton La Arduino
Video: Arduino Button Debounce Tutorial 2024, Mai
Anonim

Ne-am uitat deja la conectarea unui buton la Arduino și am atins problema contactelor „săritoare”. Acesta este un fenomen foarte enervant care determină apăsarea repetată a butoanelor și face dificilă gestionarea programată a clicurilor pe butoane. Să vorbim despre cum să scapi de sărutul de contact.

Efect de respingere a contactului
Efect de respingere a contactului

Necesar

  • - Arduino;
  • - buton tactil;
  • - rezistor cu o valoare nominală de 10 kOhm;
  • - Dioda electro luminiscenta;
  • - conectarea firelor.

Instrucțiuni

Pasul 1

Saltul de contact este un fenomen comun în întrerupătoarele mecanice, butoanele, comutatoarele și relee. Datorită faptului că contactele sunt de obicei realizate din metale și aliaje care au elasticitate, atunci când sunt închise fizic, acestea nu stabilesc imediat o conexiune fiabilă. Într-o perioadă scurtă de timp, contactele se închid de mai multe ori și se resping reciproc. Drept urmare, curentul electric capătă o valoare de stare stabilă nu instantaneu, ci după o serie de urcușuri și coborâșuri. Durata acestui efect tranzitoriu depinde de materialul de contact, dimensiune și design. Ilustrația arată o oscilogramă tipică atunci când contactele butonului tactil sunt închise. Se poate vedea că timpul de la trecerea la starea de echilibru este de câteva milisecunde. Aceasta se numește „săritură”.

Acest efect nu este vizibil în circuitele electrice de control al iluminatului, al motoarelor sau al altor senzori și dispozitive inerțiale. Dar în circuitele în care există o citire și o procesare rapidă a informațiilor (unde frecvențele sunt de același ordinea cu impulsurile de „săritură” sau mai mari), aceasta este o problemă. În special, Arduino UNO, care funcționează la 16 MHz, este excelent la prinderea contactului prin acceptarea unei secvențe de unii și zerouri în locul unui singur comutator 0 la 1.

Contactul sări atunci când apăsați un buton
Contactul sări atunci când apăsați un buton

Pasul 2

Să vedem modul în care sărutul de contact afectează funcționarea corectă a circuitului. Să conectăm butonul de ceas la Arduino folosind un circuit de rezistență verticală. Prin apăsarea butonului, vom aprinde LED-ul și îl vom lăsa aprins până când butonul este apăsat din nou. Pentru claritate, conectăm un LED extern la pinul digital 13, deși cel încorporat poate fi eliminat.

Conectarea unui buton la un Arduino folosind un circuit de rezistență pull-up
Conectarea unui buton la un Arduino folosind un circuit de rezistență pull-up

Pasul 3

Pentru a îndeplini această sarcină, primul lucru care îmi vine în minte:

- rețineți starea anterioară a butonului;

- comparați cu starea actuală;

- dacă starea s-a schimbat, atunci schimbăm starea LED-ului.

Să scriem o astfel de schiță și să o încărcăm în memoria Arduino.

Când circuitul este pornit, efectul săriturilor de contact este imediat vizibil. Se manifestă prin faptul că LED-ul nu se aprinde imediat după apăsarea butonului, sau se aprinde și apoi se stinge sau nu se stinge imediat după apăsarea butonului, dar rămâne aprins. În general, circuitul nu funcționează stabil. Și dacă pentru o sarcină cu aprinderea LED-ului acest lucru nu este atât de critic, atunci pentru alte sarcini mai serioase, este pur și simplu inacceptabil.

Schița apăsării butonului de procesare fără a lua în considerare sărutul contactului
Schița apăsării butonului de procesare fără a lua în considerare sărutul contactului

Pasul 4

Vom încerca să remediem situația. Știm că sărutul de contact are loc în câteva milisecunde după închiderea contactului. Să așteptăm, să zicem, la 5 ms după schimbarea stării butonului. De data aceasta pentru o persoană este aproape o clipă, iar apăsarea unui buton de către o persoană durează de obicei mult mai mult - câteva zeci de milisecunde. Iar Arduino funcționează excelent cu perioade de timp atât de scurte, iar aceste 5 ms îi vor permite să întrerupă săriturile contactelor prin apăsarea unui buton.

În această schiță, vom declara procedura debounce () („bounce” în limba engleză este doar „bounce”, prefixul „de” înseamnă procesul invers), la intrarea căruia furnizăm starea anterioară a butonului. Dacă o apăsare pe buton durează mai mult de 5 msec, atunci este într-adevăr o apăsare.

Prin detectarea presei, schimbăm starea LED-ului.

Încărcați schița pe placa Arduino. Totul este mult mai bine acum! Butonul funcționează fără greș, atunci când este apăsat, LED-ul schimbă starea, așa cum am dorit.

Schiță de procesare a unui buton apăsat, ținând cont de rebotul contactului
Schiță de procesare a unui buton apăsat, ținând cont de rebotul contactului

Pasul 5

Funcționalități similare sunt oferite de bibliotecile speciale, cum ar fi biblioteca Bounce2. O puteți descărca de pe linkul din secțiunea „Surse” sau de pe site-ul https://github.com/thomasfredericks/Bounce2. Pentru a instala biblioteca, plasați-o în directorul bibliotecilor din mediul de dezvoltare Arduino și reporniți IDE-ul.

Biblioteca „Bounce2” conține următoarele metode:

Bounce () - inițializarea obiectului „Bounce”;

interval nul (ms) - setează timpul de întârziere în milisecunde;

void attach (număr pin) - setează pinul la care este conectat butonul;

int update () - actualizează obiectul și returnează true dacă starea pinului s-a schimbat și false în caz contrar;

int read () - citește noua stare a pinului.

Să rescriem schița folosind biblioteca. Puteți, de asemenea, să vă amintiți și să comparați starea trecută a butonului cu cea curentă, dar să simplificăm algoritmul. Când butonul este apăsat, vom număra apăsările și fiecare apăsare impar va aprinde LED-ul și fiecare apăsare pară îl va opri. Această schiță arată concis, ușor de citit și ușor de utilizat.

Recomandat: