Na Arduino, pored kompleksnih senzora, vrlo često spajamo i običnu tipku (dugme) ili button.
Button služi za slanje signala Arduinu za pokretanje odgovarajućih akcija, kao što je uključivanje i isključivanje LED diode kao na slici ispod.

Razlika između tipke i prekidača je što tipka na pritisak uspostavi kontakt koji se prekida nakon otpuštanja, dok prekidač zadrži stanje koje je nastalo pritiskom.
Problem sa upotrebom dugmeta (button) je u tome što dolazi do odskakanja kontakata nakon pritiska i otpuštanja i višestrukog uspostavljanja i gubljenaj kontakta. To i nije neki problem sa aspekta čovjeka ali budući da Arduino napravi ogroman broj ciklusa u sekundi, to i izvrši veliki broj detekcija uključivanja i isključivanja dugmeta i time mijenja stanje na izlazima kao da je izvršeno višestruko pritiskanje tipke.
Da bi to spriječili koristimo debounce metod za sprječavanje višestruke detekcije pritiska dugmeta.
Ispod je kôd sketch-a koji vrši button debounce (kopirajte kompletan kôd ispod u Arduino IDE prozor i upload-ujte ga na Arduino) :
/* * UKLJUČIVANJE/ISKLJUČIVANJE (TOGGLE) IZLAZA * POMOĆU ISTOG DUGMETA (PUSH-BUTTON) UZ DEBOUNCE METOD * * Autor: Samir Gutić * URL: http://amicus.ba * Datum: 29. I 2017. */
//Uključivanje i isključivanje (toggle) izlaza pomoću istog dugmeta (push-button)
const int intPinDugmeta = 6; //Broj pin-a dugmetaint intStanjeIzlaza = LOW; //Trenutno stanje izlaznog pina (LED)int intOcitanoStanje; //Trenutno očitavanje sa ulaznog pina (dugme)int intPrethodnoOcitano= LOW; //Prethodno očitavanje sa ulaznog pina (dugme)int intZadnjeStanjeDugmeta = LOW; //Prethodno stanje dugmetaint intStanjeDugmeta; //Stanje dugmetaunsigned long longVrijeme = 0; //Zadnje vrijeme preklapanja dugmetaunsigned long longDebounce = 30; //Vrijeme čekanja na odskakanje (debounce) dugmeta. Povećati ako izlaz treperiint intLedPin = 13; //LED povezana na digitalni pin 13int intDugme; //Uključeno/isključeno dugme
void setup(){ pinMode(intPinDugmeta, INPUT); digitalWrite(intPinDugmeta, HIGH); //Uključivanje ugrađenog pull-up otpornika pinMode(intLedPin, OUTPUT); intDugme=0;}
void loop(){ intOcitanoStanje = digitalRead(intPinDugmeta); //Ako je dugme pritisnuto zbog odskakanja ili stvarnog pritiska if (intOcitanoStanje != intPrethodnoOcitano) { //Reset debounce timera longVrijeme = millis(); } if ((millis() - longVrijeme) > longDebounce) { //Dodjela očitanog stanja stanju dugmeta intStanjeDugmeta = intOcitanoStanje; //Sada promijeniti stanje intStanjeIzlaza kada je dugme pritisnuto if (intStanjeDugmeta == HIGH && intZadnjeStanjeDugmeta == LOW) { intZadnjeStanjeDugmeta = HIGH; if (intStanjeIzlaza == HIGH) { intStanjeIzlaza = LOW; intDugme=0; } else { intStanjeIzlaza = HIGH; intDugme=1; } } if (intStanjeDugmeta == LOW && intZadnjeStanjeDugmeta == HIGH) { intZadnjeStanjeDugmeta = LOW; } } //Uzimanje zadnjeg očitavanja zbog praćenja stanja intPrethodnoOcitano= intOcitanoStanje; if (intDugme ==1) { //Dugme uključeno digitalWrite(intLedPin, HIGH); // Uključuje LED 13 } else { //Dugme isključeno digitalWrite(intLedPin, LOW); // Isključuje LED 13 }}
U suštini, sketch prati da li se dogodio ponovljeni pritisak dugmeta u određenom vremenskom periodu i ignoriše ga.
Drugi način za debounce dugmeta je pomoću bounce2 metoda (debounce se zvanično više ne koristi - depricated).
/* * UKLJUČIVANJE/ISKLJUČIVANJE (TOGGLE) IZLAZA * POMOĆU ISTOG DUGMETA (PUSH-BUTTON) UZ BOUNCE2 METOD * * Autor: Samir Gutić * URL: http://amicus.ba * Datum: 31. I 2017. */
#include <Bounce2.h>#define PinDugmeta 6#define PinLED 13
int intStanjeLED = LOW;
//Kreiranje instance Bounce objektaBounce bOdskakanje = Bounce();
void setup() { //Kreiranje dugmeta sa internim pull-up otpornikom pinMode(PinDugmeta,INPUT_PULLUP); //Kreiranje Bounce instance bOdskakanje.attach(PinDugmeta); bOdskakanje.interval(100); //Interval odskakanja dugmeta //Definisati LED pinMode(PinLED,OUTPUT); digitalWrite(PinLED,intStanjeLED); }
void loop() { //Update Bounce instancu bOdskakanje.update(); //Izvršavanje koda kada Bounce pada (prijelaz sa HIGH na LOW) if (bOdskakanje.fell()) { //Promijeni (toggle) stanje LED intStanjeLED = !intStanjeLED; digitalWrite(PinLED,intStanjeLED); }}
U primjeru iznad je korištena biblioteka bounce2.h koju treba uključiti u sketch a koja sadrži metode detekcije prednje i zadnje ivice signala odnosno pritiska i odpuštanja tipke. Zbog toga je i kôd sketch-a puno kraći i pregledniji.
Debounce i bounce2 metod je demonstriran na šemi sa Arduino Uno, dugmetom u pull down spoju i LED diode. Pritiskom na dugme i otpuštanjem se uključuje LED dioda koja ostaje uključena do ponovnog pritiska na isto dugme. To predstavlja toggle dugme.
Šema spoja elemenata kreirana u Fritzing programu je na slici ispod.

Kao što se vidi sa šeme iznad, plus pol LED diode je, preko otpornika R1=220Ω spojen na pin broj 13. Jedan kontakt tipke za pritiskanje je spojen direktno na +5V. Drugo kontakt je, preko otpornika R2=10KΩ spojen na masu ali i direktno na Arduino pin broj 6. Takav spoj tipke se naziva pull down spoj.
Električna šema spoja je na sljedećoj slici.

Video koji prikazuje rad dugmeta i LED diode je ispod.
Bez debounce metoda bi LED dioda, nakon pritiska na dugme, nekoliko puta bila uključena i isključena i nikada ne bi bilo sigurno da li će ostati uključena ili isključena.
Umjesto uključivanja i isključivanja LED diode je moguće izvršti bilo koju akciju po želji.
Potrebne komponente:
1 x Arduino UNO
1 x Breadboard
1 x Button (NO - normalno otvoren)
1 x LED
1 x otpornik 220Ω
1 x otpornik 10KΩ
Žice za spajanje
9V napajanje











