Acest exemplu arată cum poate fi folosit un buton drept comutator: de fiecare dată când se apasă butonul, LED-ul (sau orice altceva folosit ca output) este pornit (dacă inițial este ÎNCHIS) sau este oprit (dacă inițial este DESCHIS). De asemenea, face debounce pe intrare, ceea ce Înseamnă că verifică de două ori într-o perioadă scurtă de timp pentru a avea siguranța că butonul este apasat.
Schema circuitului:
Fără această funcție, apăsarea butonului poate aparea în program ca o apasare multiplă. În acest caz se poate utiliza funcția “millis()” pentru a urmării momentul în care butonul este apăsat.
De fiecare dată când butonul este apăsat, pinul de intrare merge de la LOW la HIGH, iar pinul de ieșire de la HIGH la LOW. Există o întârziere minimă între verificarea apăsării butonului pentru a nu avea înregistrări false (adică să ignore zgomotul).
Codul sursă al programului care se va încărca în placa de dezvoltare este prezentat în continuare:
const int buttonPin = 2; // numarul pinului pentru buton
const int ledPin = 13; // numarul pinului pentru LED
int ledState = HIGH; // starea curenta a pinului de iesire
int buttonState; // starea curenta a pinului de intrare
int lastButtonState = LOW; // citirea precedenta a pinului de intrare
long lastDebounceTime = 0; // ultima data cand i-a fost schimbata starea pinului de output
long debounceDelay = 50; // intarziera intre verificarea apasarii butonului pentru a nu avea inregistrari false
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() – lastDebounceTime) > debounceDelay) {
buttonState = reading;
}
digitalWrite(ledPin, buttonState);
lastButtonState = reading;
}
0 comentarii:
Trimiteți un comentariu