„Bounce“ contact - acesta este un fenomen specific pentru comutatoare mecanice, butoane, comutatoare și relee. Datorită faptului că contactele sunt de obicei realizate din metale și aliaje, care au elasticitate în circuitul fizic nu sunt stabili imediat o conexiune fiabilă. Într-un timp scurt, contactele sunt închise de câteva ori și se resping reciproc. Ca rezultat, curentul electric are o valoare constantă, nu imediat, dar după o succesiune de ori se ridică și cad. Durata acestui efect de tranziție depinde de materialul de contact, mărimea și structura lor. Ilustrația prezintă o formă de undă tipică pentru închiderea unui buton de ceas de contact. Se observă că timpul de la trecerea la starea de echilibru este de câteva milisecunde. Aceasta se numește „Bounce“.
Acest efect nu se observă în circuitele electrice de control al iluminatului, motoare sau alți senzori și dispozitive inerțiale. Dar, într-un circuit în cazul în care există o citire rapidă și de prelucrare a informațiilor (în cazul în care frecvențele de același ordin de mărime ca impulsuri „bounce“ sau de mai sus), aceasta este o problemă. În particular, Arduino UNO, care funcționează la o frecvență de 16 MHz, și prinde contacte „sări“, luând o secvență de unu și zero în loc de un singur comutator la 0 la 1.
Să vedem cum efect de contact de respingere cu privire la funcționarea corectă a circuitului. Conectat la butonul Arduino ceas pe schema cu un rezistor de strângere. Va prin apăsarea unui buton pentru a aprinde LED-ul și lăsați activată până când apăsați un buton. Pentru claritate, conectat la un terminal digital de 13, un LED extern, deși este posibil să se administreze și integrate.
Pentru a pune în aplicare această sarcină, primul lucru care vine în minte:
- amintesc starea anterioară a butonului;
- în comparație cu starea actuală;
- în cazul în care starea sa schimbat, schimbarea de stare LED-uri.
Să scrie o schiță și de încărcare în memorie Arduino.
Atunci când sistemul să funcționeze, efectul este vizibil imediat asupra influenței contactului de respingere. Ea se manifestă în faptul că LED-ul se aprinde imediat după apăsarea butonului, sau se aprinde și apoi se stinge sau se închide imediat după apăsarea butonului, și continuă să ardă. În general, funcționarea circuitului devine instabil. Și dacă nu este atât de critică, celelalte, probleme mai grave, este pur și simplu inacceptabil pentru o problemă cu includerea LED-ului.
Vom încerca să rectifice situația. Noi știm că un contact de respingere se manifestă în câteva milisecunde după închiderea de contact. Să luăm după schimbarea stării de buton să aștepte, să zicem, 5 ms. Este timpul pentru om este practic instantanee, și apăsați pe butonul om, de obicei, durează mult mai mult timp - câteva zeci de milisecunde. Un Arduino mare de lucrări cu o astfel de perioadă scurtă de timp, iar 5 ms îi va permite să taie sări de contact prin apăsarea butonului.
În această schiță vom declara procesul de debounce () ( „Bounce“, în limba engleză - este doar „Bounce“, prefixul „de“ este procesul invers), în care intrarea Supunem starea anterioară a butonului. Dacă prin apăsarea continuă timp de 5 ms, atunci este foarte presant.
Definirea depresiunii, ne schimbă starea LED-ului.
Încărcați schița în placa Arduino. Acum totul este mult mai bine! Butonul funcționează fără eșec, atunci când apăsați LED-ul se va schimba starea așa cum ne-o dorim.