În articolol  despre leduri am vazut cum se pot comanda 8 LED-uri cu ajutorul plăcii de dezvoltare Arduino (mod ieşire digitală). Mai departe ne propunem să vedem cum putem primii informaţii de la utilizator prin apăsarea unor butoane (mod intrare digitală).

Ce sunt butoanele?
Sunt sigur că eşti familiarizat cu întrerupătoarele. În locuinţa ta foloseşti cel puţin unul, cel de lumină. Rolul întrerupătorului este de a permite sau nu trecerea curentului electric prin acţionarea unui contact mecanic.
Diferenţa între un întrerupător şi un buton este faptul că butonul are revenire, ceea ce înseamnă că în momentul în care apeşi un buton acesta va revenii automat în poziţia iniţială fără intervenţia ta. Exemple de butoane: tastatura de la PC, tastele unui telefon mobil etc.

Simbolizare

but_sch
Bounce/Debounce
Datorită contactului mecanic din interiorul butonului în momentul acţionării acestuia, semnalul trimis catre microcontroler nu este unul „curat” pornit/oprit ci este o trecere continuă între pornit/oprit până la stabilizarea pe una dintre cele două stări. Efectul este de cele mai multe ori nedorit. Spre exemplu: în momentul în care apeşi un buton trebuie să se deschidă o poartă iar în momentul când îl apeşi din nou vrei ca poarta respectivă să se închidă. Fără o procedură adecvată de debounce poarta ta va oscila între închis/deschis făcând din butonul respectiv o comandă nesigură.

Pentru a „curăţa” acest semnal se pot folosi mai multe metode, şi anume hardware sau software. Dacă eşti interesat de efectul de bounce al butoanelor găseşti mai multe informaţii aici: http://roroid.ro/wiki/pmwiki.php/Main/DebouncingButtonsOnVirtualPorts, noi în continuare vom folosi metoda software, deoarece este mai simplă şi nu implica modificari suplimentare în partea electronică a montajului.

Secvenţa de program utilizată pentru a face debounce unui buton este urmatoarea:

#include <Bounce.h>// se include libraria pentru functiile de debounce

Bounce buton1 = Bounce(2,5); /*se defineste pinul pe care este legat butonul si durata in ms
pentru care se face debounce. Aici butonul este legat pe pinul 2 iar durata este definita la 5ms.
Durata aceasta inseamna ca daca apasati butonul intr-un interval mai mic de 5ms
microcontrolerul va inregistra 2 apasari astfel va inregistra 1 apasare.*/

if ( buton1.update() ) {//se verifica starea butonului
if ( buton1.read() == HIGH) {//daca butonul este apasat se executa secventa de cod descrisa mai jos
Serial.println("Salut lume!");//se tipareste pe portul serial urmatorul mesaj si muta cursorul pe o noua linie
}
}

Legarea butonului la placa de dezvoltare

Pentru a realiza montajul de mai jos aveţi nevoie de o rezistenţă de 220Ω şi de un buton.

aplic_but

aplicatie_but_SCH

Programul final

#include <Bounce.h>// se include libraria pentru functiile de debounce

Bounce buton1 = Bounce(2,5); /*se defineste pinul pe care este legat butonul si durata in ms
pentru care se face debounce. Aici butonul este legat pe pinul 2 iar durata este definita la 5ms.
Durata aceasta inseamna ca daca apasati butonul intr-un interval mai mic de 5ms
microcontrolerul va inregistra 2 apasari astfel va inregistra 1 apasare.*/

void tasta(){
if ( buton1.update() ) {//se verifica starea butonului
if ( buton1.read() == HIGH) {//daca butonul este apasat se executa secventa de cod descrisa mai jos
Serial.println("Salut lume!");//se tipareste pe portul serial urmatorul mesaj si muta cursorul pe o noua linie
}
}
}
void setup()//functia de initializare
{
Serial.begin(9600);//se initializeaza portul serial
pinMode(2, INPUT);//se defineste pinul pe care este conectat butonul ca si intrare
}
void loop(){
tasta();//se apeleaza continuu functia tasta
}

 

Spor la treabă!

Butoane
Etichetat pe:        

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.