Pada artikel ini, kita akan belajar cara membedakan antara short press (tekan sebentar) dan long press (tekan lama) menggunakan Arduino. Teknik seperti ini sering dipakai pada berbagai perangkat elektronik, misalnya tombol power, menu navigasi, hingga kontrol mode pada robot atau IoT. Artikel ini akan membahas tentang cara mendeteksi short press, cara mendeteksi long press, cara membaca short press dan long press, serta cara membuat pembacaan tombol lebih stabil dengan debounce. Di beberapa bagian awal, kita akan mempelajari konsep dasarnya terlebih dahulu. Setelah itu, baru lanjut ke implementasi yang lebih stabil menggunakan teknik debounce agar pembacaan tombol tidak error.
Perangkat yang Dibutuhkan
- Arduino UNO R3
- Kabel USB
- Breadboard
- Kabel jumper
- Push button / tombol tekan
- Panel push button
- Modul push button
Wiring Diagram
Pada tutorial ini, tombol menggunakan internal pull-up resistor bawaan Arduino. Artinya:
- Saat tombol tidak ditekan → status pin = HIGH
- Saat tombol ditekan → status pin = LOW
Konfigurasi ini lebih sederhana karena tidak membutuhkan resistor eksternal tambahan.
Cara Mendeteksi Short Press
Short press adalah kondisi ketika tombol ditekan dalam waktu singkat, misalnya kurang dari 1 detik. Konsep dasarnya cukup sederhana:
1. Simpan waktu saat tombol ditekan
2. Simpan waktu saat tombol dilepas
3. Hitung selisih waktunya
4. Jika durasinya lebih kecil dari batas tertentu, berarti short press terdeteksi
Menentukan Durasi Maksimal Short Press
const int SHORT_PRESS_TIME = 500; // 500 ms
Artinya, jika tombol ditekan kurang dari 500 milidetik, maka dianggap sebagai short press.
Menyimpan Waktu Saat Tombol Ditekan
if(lastState == HIGH && currentState == LOW)
pressedTime = millis();
Kode di atas mendeteksi perubahan status tombol dari HIGH ke LOW, yang berarti tombol baru saja ditekan.
Menghitung Lama Tekanan
long pressDuration = releasedTime - pressedTime;
Mengecek Apakah Termasuk Short Press
if(pressDuration < SHORT_PRESS_TIME)
Serial.println("Short press terdeteksi");
Kode Arduino untuk Short Press
const int BUTTON_PIN = 7;
const int SHORT_PRESS_TIME = 500;
int lastState = HIGH;
int currentState;
unsigned long pressedTime = 0;
unsigned long releasedTime = 0;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
currentState = digitalRead(BUTTON_PIN);
if(lastState == HIGH && currentState == LOW) {
pressedTime = millis();
}
else if(lastState == LOW && currentState == HIGH) {
releasedTime = millis();
long pressDuration = releasedTime - pressedTime;
if(pressDuration < SHORT_PRESS_TIME)
Serial.println("Short press terdeteksi");
}
lastState = currentState;
}
Langkah Cepat
- Upload kode ke Arduino melalui Arduino IDE
- Tekan tombol dengan cepat beberapa kali
- Buka Serial Monitor
- Lihat hasil pembacaan tombol
Perlu Diperhatikan
Kadang satu kali tekan bisa terbaca lebih dari sekali. Ini adalah efek bouncing pada tombol mekanis dan merupakan hal yang normal. Nanti di bagian debounce masalah ini akan diperbaiki.
Cara Mendeteksi Long Press
Long press digunakan ketika tombol ditekan lebih lama dari waktu tertentu, misalnya 1 detik atau lebih. Ada dua metode yang umum digunakan:
1. Long press terdeteksi setelah tombol dilepas
2. Long press terdeteksi saat tombol masih ditekan
Long Press Setelah Tombol Dilepas
Pada metode ini, Arduino baru mengecek durasi tekan setelah tombol dilepas.
Kode Arduino
const int BUTTON_PIN = 7;
const int LONG_PRESS_TIME = 1000;
int lastState = HIGH;
int currentState;
unsigned long pressedTime = 0;
unsigned long releasedTime = 0;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
currentState = digitalRead(BUTTON_PIN);
if(lastState == HIGH && currentState == LOW) {
pressedTime = millis();
}
else if(lastState == LOW && currentState == HIGH) {
releasedTime = millis();
long pressDuration = releasedTime - pressedTime;
if(pressDuration > LONG_PRESS_TIME)
Serial.println("Long press terdeteksi");
}
lastState = currentState;
}
Langkah Cepat
- Upload kode ke Arduino
- Tekan tombol lebih dari 1 detik
- Lepaskan tombol
- Lihat hasil di Serial Monitor
Pada metode ini, long press baru akan muncul setelah tombol dilepas.
Long Press Saat Tombol Masih Ditekan
Metode ini lebih responsif karena Arduino langsung mendeteksi long press tanpa menunggu tombol dilepas.
Kode Arduino
const int BUTTON_PIN = 7;
const int LONG_PRESS_TIME = 1000;
int lastState = HIGH;
int currentState;
unsigned long pressedTime = 0;
bool isPressing = false;
bool isLongDetected = false;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
currentState = digitalRead(BUTTON_PIN);
if(lastState == HIGH && currentState == LOW) {
pressedTime = millis();
isPressing = true;
isLongDetected = false;
}
else if(lastState == LOW && currentState == HIGH) {
isPressing = false;
}
if(isPressing == true && isLongDetected == false) {
long pressDuration = millis() - pressedTime;
if(pressDuration > LONG_PRESS_TIME) {
Serial.println("Long press terdeteksi");
isLongDetected = true;
}
}
lastState = currentState;
}
Langkah Cepat
- Upload kode ke Arduino
- Tekan dan tahan tombol beberapa detik
- Lihat hasil di Serial Monitor
Pada metode ini, pesan long press muncul ketika tombol masih ditekan.
Mendeteksi Short Press dan Long Press Sekaligus
Kadang satu tombol dipakai untuk dua fungsi berbeda:
- Tekan sebentar → fungsi A
- Tekan lama → fungsi B
Contohnya:
- Short press → ganti mode
- Long press → reset sistem
Short Press dan Long Press Setelah Tombol Dilepas
const int BUTTON_PIN = 7;
const int SHORT_PRESS_TIME = 1000;
const int LONG_PRESS_TIME = 1000;
int lastState = HIGH;
int currentState;
unsigned long pressedTime = 0;
unsigned long releasedTime = 0;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
currentState = digitalRead(BUTTON_PIN);
if(lastState == HIGH && currentState == LOW) {
pressedTime = millis();
}
else if(lastState == LOW && currentState == HIGH) {
releasedTime = millis();
long pressDuration = releasedTime - pressedTime;
if(pressDuration < SHORT_PRESS_TIME)
Serial.println("Short press terdeteksi");
if(pressDuration > LONG_PRESS_TIME)
Serial.println("Long press terdeteksi");
}
lastState = currentState;
}
Langkah Cepat
- Upload kode ke Arduino
- Coba tekan tombol sebentar dan lama
- Perhatikan hasil di Serial Monitor
Short Press dan Long Press Saat Tombol Masih Ditekan
Versi ini memungkinkan long press langsung terdeteksi sebelum tombol dilepas.
const int BUTTON_PIN = 7;
const int SHORT_PRESS_TIME = 1000;
const int LONG_PRESS_TIME = 1000;
int lastState = HIGH;
int currentState;
unsigned long pressedTime = 0;
unsigned long releasedTime = 0;
bool isPressing = false;
bool isLongDetected = false;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
currentState = digitalRead(BUTTON_PIN);
if(lastState == HIGH && currentState == LOW) {
pressedTime = millis();
isPressing = true;
isLongDetected = false;
}
else if(lastState == LOW && currentState == HIGH) {
isPressing = false;
releasedTime = millis();
long pressDuration = releasedTime - pressedTime;
if(pressDuration < SHORT_PRESS_TIME)
Serial.println("Short press terdeteksi");
}
if(isPressing == true && isLongDetected == false) {
long pressDuration = millis() - pressedTime;
if(pressDuration > LONG_PRESS_TIME) {
Serial.println("Long press terdeteksi");
isLongDetected = true;
}
}
lastState = currentState;
}
Membuat Pembacaan Tombol Lebih Stabil dengan Debounce
Pada project nyata, debounce sangat penting. Tanpa debounce, satu kali tekan bisa terbaca beberapa kali akibat noise mekanis pada tombol. Karena proses debounce cukup rumit, terutama jika memakai banyak tombol, kita bisa menggunakan library ezButton agar lebih praktis.
Short Press dan Long Press dengan Debounce
Install Library ezButton
- Buka Arduino IDE
- Masuk ke Library Manager
- Cari ezButton
- Install library tersebut
Kode Arduino
#include <ezButton.h>
const int SHORT_PRESS_TIME = 1000;
const int LONG_PRESS_TIME = 1000;
ezButton button(7);
unsigned long pressedTime = 0;
unsigned long releasedTime = 0;
void setup() {
Serial.begin(9600);
button.setDebounceTime(50);
}
void loop() {
button.loop();
if(button.isPressed())
pressedTime = millis();
if(button.isReleased()) {
releasedTime = millis();
long pressDuration = releasedTime - pressedTime;
if(pressDuration < SHORT_PRESS_TIME)
Serial.println("Short press terdeteksi");
if(pressDuration > LONG_PRESS_TIME)
Serial.println("Long press terdeteksi");
}
}
Langkah Cepat
- Install library ezButton
- Upload kode ke Arduino
- Tekan tombol sebentar dan lama
- Buka Serial Monitor untuk melihat hasilnya
Dengan library `ezButton`, pembacaan tombol jadi lebih stabil dan kode juga lebih rapi.
Baca juga: Arduino Button Debounce - Cara Mengatasi Tombol Terbaca Berkali-kali
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 - Mendeteksi Short Press dan Long Press pada Button"