Saat pertama kali menggunakan push button pada Arduino, banyak pemula mengira bahwa tombol hanya berubah dari kondisi HIGH ke LOW atau LOW ke HIGH satu kali setiap ditekan. Namun pada praktiknya, kondisi tersebut tidak langsung stabil. Karena faktor mekanis pada tombol, sinyal bisa berubah sangat cepat beberapa kali dalam hitungan milidetik sebelum benar-benar stabil. Fenomena ini disebut button bouncing atau button chatter. Akibatnya, satu kali tekan tombol bisa terbaca sebagai beberapa kali tekan oleh Arduino. Pada proyek sederhana mungkin tidak terlalu terlihat, tetapi pada proyek seperti menu, counter, robot, atau kontrol relay, masalah ini bisa menyebabkan sistem bekerja tidak sesuai. Pada artikel ini, kita akan mempelajari cara kerja debounce, perbedaan pembacaan tombol dengan dan tanpa debounce, serta cara membuat pembacaan tombol menjadi lebih stabil menggunakan kode Arduino maupun library tambahan.
Perangkat Keras yang Dibutuhkan
- Arduino UNO R3
- Kabel USB
- Breadboard
- Kabel jumper
- Push button / tombol tekan
- Panel push button
- Modul push button
Apa itu Button Debounce?
Debounce adalah teknik untuk menghilangkan sinyal noise atau bouncing pada tombol. Ketika tombol ditekan, kontak logam di dalam tombol sebenarnya tidak langsung stabil. Kontak tersebut akan memantul sangat cepat sehingga menghasilkan perubahan sinyal seperti ini:
HIGH → LOW → HIGH → LOW → LOW
Padahal pengguna hanya menekan tombol satu kali. Arduino membaca perubahan tersebut sebagai beberapa penekanan tombol.
Kenapa Debounce Penting?
Tanpa debounce, beberapa masalah berikut bisa terjadi:
- Counter bertambah lebih dari satu
- LED berkedip tidak normal
- Menu berpindah beberapa kali
- Relay aktif berulang
- Sistem menjadi tidak stabil
Karena itu, debounce hampir selalu digunakan pada proyek berbasis tombol.
Wiring Diagram
Pada tutorial ini, tombol dihubungkan menggunakan mode INPUT_PULLUP. Dengan konfigurasi:
- Satu kaki tombol → pin digital Arduino
- Satu kaki tombol → GND
Metode ini lebih sederhana karena tidak membutuhkan resistor eksternal.
Membaca Tombol Tanpa Debounce
Sebelum memahami debounce, mari lihat dulu bagaimana perilaku tombol tanpa debounce.
Kode Arduino Tanpa Debounce
const int BUTTON_PIN = 7;
int lastState = LOW;
int currentState;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
currentState = digitalRead(BUTTON_PIN);
if(lastState == HIGH && currentState == LOW)
Serial.println("Tombol ditekan");
else if(lastState == LOW && currentState == HIGH)
Serial.println("Tombol dilepas");
lastState = currentState;
}
Cara Menjalankan Program
Langkah-langkah
1. Hubungkan Arduino ke PC menggunakan kabel USB
2. Buka Arduino IDE
3. Pilih board dan port yang sesuai
4. Salin kode program di atas
5. Upload program ke Arduino
6. Buka Serial Monitor
7. Tekan dan tahan tombol beberapa detik
8. Lepaskan tombol
Hasil yang Terjadi
Meskipun tombol hanya ditekan satu kali, Serial Monitor biasanya akan menampilkan beberapa kali secara acak. Inilah efek dari button bouncing.
Tombol ditekan
Tombol dilepas
Tombol ditekan
Tombol dilepas
Kenapa Bouncing Bisa Terjadi?
Push button bekerja menggunakan kontak logam kecil. Saat tombol ditekan:
- Kontak logam saling menyentuh
- Namun tidak langsung stabil
- Terjadi pantulan kecil berkali-kali
- Arduino membaca setiap pantulan sebagai perubahan sinyal
Karena Arduino bekerja sangat cepat, perubahan kecil ini tetap terbaca.
Cara Mengatasi Bouncing dengan Debounce
Salah satu metode paling umum adalah menambahkan delay kecil sebelum Arduino menganggap sinyal benar-benar valid. Biasanya delay debounce berada di kisaran:
- 20 ms
- 50 ms
- 100 ms
Kode Arduino dengan Debounce
const int BUTTON_PIN = 7;
const int DEBOUNCE_DELAY = 50;
int lastSteadyState = LOW;
int lastFlickerableState = LOW;
int currentState;
unsigned long lastDebounceTime = 0;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
currentState = digitalRead(BUTTON_PIN);
if (currentState != lastFlickerableState) {
lastDebounceTime = millis();
lastFlickerableState = currentState;
}
if ((millis() - lastDebounceTime) > DEBOUNCE_DELAY) {
if (lastSteadyState == HIGH && currentState == LOW)
Serial.println("Tombol ditekan");
else if (lastSteadyState == LOW && currentState == HIGH)
Serial.println("Tombol dilepas");
lastSteadyState = currentState;
}
}
Penjelasan Cara Kerja Debounce
Program di atas bekerja dengan cara:
1. Membaca status tombol
2. Jika ada perubahan sinyal, Arduino mencatat waktunya menggunakan millis()
3. Arduino menunggu beberapa milidetik
4. Jika sinyal tetap stabil setelah waktu debounce selesai, maka perubahan dianggap valid
Dengan cara ini, bouncing tidak lagi terbaca sebagai banyak penekanan.
Hasil Setelah Menggunakan Debounce
Sekarang ketika tombol ditekan satu kali, hanya muncul satu kali. Pembacaan tombol menjadi jauh lebih stabil dan akurat.
Tombol ditekan
Tombol dilepas
Menggunakan Library ezButton
Jika tidak ingin membuat debounce manual, kita bisa menggunakan library ezButton. Library ini membuat kode lebih pendek, rapi, dan mudah dipahami.
Keunggulan ezButton
Beberapa keuntungan menggunakan ezButton:
- Debounce otomatis
- Kode lebih sederhana
- Mudah digunakan
- Cocok untuk banyak tombol
- Tidak perlu membuat logika debounce sendiri
Kode Debounce untuk Satu Tombol
#include <ezButton.h>
ezButton button(7);
void setup() {
Serial.begin(9600);
button.setDebounceTime(50);
}
void loop() {
button.loop();
if(button.isPressed())
Serial.println("Tombol ditekan");
if(button.isReleased())
Serial.println("Tombol dilepas");
}
Penjelasan Program
Membuat Objek Tombol
ezButton button(7);
Artinya tombol terhubung ke pin 7.
Mengatur Waktu Debounce
button.setDebounceTime(50);
Menentukan debounce selama 50 milidetik.
Membaca Tombol
button.loop();
Fungsi ini wajib dipanggil terus-menerus di dalam loop().
Mendeteksi Tombol Ditekan
button.isPressed()
Mendeteksi Tombol Dilepas
button.isReleased()
Menggunakan Debounce untuk Banyak Tombol
Jika proyek menggunakan lebih dari satu tombol, library ezButton sangat membantu.
Kode Debounce Banyak Tombol
#include <ezButton.h>
ezButton button1(6);
ezButton button2(7);
ezButton button3(8);
void setup() {
Serial.begin(9600);
button1.setDebounceTime(50);
button2.setDebounceTime(50);
button3.setDebounceTime(50);
}
void loop() {
button1.loop();
button2.loop();
button3.loop();
if(button1.isPressed())
Serial.println("Button 1 ditekan");
if(button1.isReleased())
Serial.println("Button 1 dilepas");
if(button2.isPressed())
Serial.println("Button 2 ditekan");
if(button2.isReleased())
Serial.println("Button 2 dilepas");
if(button3.isPressed())
Serial.println("Button 3 ditekan");
if(button3.isReleased())
Serial.println("Button 3 dilepas");
}
Wiring Diagram
Keuntungan Menggunakan Banyak Tombol dengan ezButton
Dengan library ini, kita bisa:
- Mengelola banyak tombol lebih mudah
- Mengurangi kode berulang
- Membuat program lebih rapi
- Menghindari error debounce manual
Kapan Debounce Harus Digunakan?
Debounce sangat penting pada proyek seperti:
- Counter digital
- Menu LCD
- Sistem keypad
- Robot
- Kontrol relay
- Smart home
- Game controller
Kapan Debounce Tidak Terlalu Dibutuhkan?
Pada beberapa kasus sederhana seperti:
- Tombol reset
- Trigger sederhana
- Sistem non-kritis
bouncing mungkin tidak terlalu terasa. Namun tetap disarankan menggunakan debounce agar sistem lebih stabil.
Tips Menggunakan Push Button pada Arduino
Beberapa tips penting:
- Gunakan mode INPUT_PULLUP
- Hindari kabel terlalu panjang
- Gunakan debounce
- Jangan gunakan delay terlalu besar
- Gunakan library jika memakai banyak tombol
Baca juga: Arduino - Mendeteksi Short Press dan Long Press pada Button
Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.
- Diskusi umum dan tanya jawab praktik: https://t.me/edukasielektronika
- Kendala spesifik dan kasus tertentu: http://bit.ly/Chatarduino


0 on: "Arduino Button Debounce - Cara Mengatasi Tombol Terbaca Berkali-Kali"