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.
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.
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.
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.
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.
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.