Ce este un buton (pushbutton)?
Butonul ( cunoscut si sub denumirea de rezistor pull-up ) este o componenta care conecteaza ( sau intrerupe ) un circuit electric.Este o componenta strict mecanica,fiind formata dintr-un arc si conectorii de carbon corespunzatori pinilor;la presare face conexiunea intre conectorii de carbon ai butonului ( si implicit intre pini ),totul fiind invelit intr-o carcasa de plastic:
Montajul
Un buton are 4 pini:oricare 2 pot fi folositi pentru alimentare ( 5V si GND ). Inainte de unul dintre ei vom conecta un fir la oricare pin digital al Arduino. De asemenea,vom adauga un rezistor (orice valoare mica) pentru egalizarea tensiunii:
Alt pin digital va fi folosit impreuna cu un pin GND pentru conexiunile LED-ului ( la fel ca in lectia precedenta):
Programul
Programul de mai jos va aprinde LED-ul cat timp este apasat butonul.LED-ul se va stinge cand este eliberat butonul:
void setup() {
pinMode(7,INPUT); // initializare pin 7 pentru citire
pinMode(8, OUTPUT); // initializare pin 8 pentru transmisie
}
void loop() {
bool stareButon = digitalRead(7); /* creare variabila logica "stareButon" egala cu citirea pinului 7
if(stareButon==1) // daca stareButon=1
{
digitalWrite(8,HIGH); // transmisie semnal HIGH prin pinul 8
}
else // altfel
{
digitalWrite(8,LOW); // transmisie semnal LOW prin pinul 8
}
}
Sa analizam programul.
In sectiunea setup folosim atributul INPUT pentru a initializa un pin pentru citire. În sectiunea loop cerem microcontrollerului să monitorizeze pinul 7 astfel încât, când de la acesta primeşte voltaj (când butonul este apăsat – 1), să trimită voltaj către led. Dacă pentru a trimite voltaj ne-am folosit de digitalWrite(), pentru citit ne vom folosi de digitalRead(). În acest fel vom citi starea pinului 7 şi îl vom transfera unei variabile.
După ce am transferat variabilei “stareButon” starea pinului, vom întreba,folosind functia if (sintaxa:if(conditie){ actiune } else { actiune }): Este “stareButon” egal cu 1 (Apasat)? Dacă răspunsul este da, atunci trimite semnal către pinul 8. Dacă răspunsul este nu, atunci nu trimite semnal către pinul 6.
După cum vedem, am definit o variabilă de tip integer (număr întreg), numită stareButon, care a preluat de la pinul şapte informaţie cu privire la voltaj.
Acest program va mentine LED-ul aprins pana cand este apasat butonul si invers:
int contorApasare = 0; // creare contor initializat cu 0
void setup(){
pinMode(8,OUTPUT); // initializare pin 8 pentru transmisie
pinMode(7,INPUT); // initializare pin 7 pentru citire
}
void loop(){
int stareButon = digitalRead(7); // creare variabila intreaga "stareButon" egala cu citirea pinului 7
if(stareButon == 0) // daca stareButon=0
{
contorApasare++; // creste variabila contor cu cate o etapa
delay(250); // Asteapta 250 ms pe etapa
}
if(contorApasare == 1) // daca contorul a numarat o apasare
{
digitalWrite(8,HIGH); // trimite semnal HIGH prin pinul 8
}
else // altfel(daca nu este apsat butonul)
{
digitalWrite(8,LOW); // trimite semnal LOW prin pinul 8(LED-ul ramane stins)
contorApasare = 0; //resetare contor la 0
}
}
Cu ajutorul functiilor if si contorului,am creat un asa-zis flip-flop,care mentine starea unui obiect pana cand un alt stimul detectat( in acest caz o citire a pinului 7 ).
Comments