Blog Archive

Arduino Indonesia. Gambar tema oleh Storman. Diberdayakan oleh Blogger.

Supported by Electronics 3 in 1

1. Jasa pencetakan PCB single layer dengan harga paling murah.

(Metode Pembuatan dengan Transfer Toner)
>PCB design sendiri (siap cetak) : Rp.150,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

(Metode Sablon Full Masking dan Silk Screen minimal pemesanan 100 Pcs)
>PCB design sendiri (siap cetak) : Rp.200,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

2. Jasa perancangan, perakitan, dan pembuatan trainer pembelajaran elektronika untuk SMK dan Mahasiswa.

3. Jasa perancangan, perakitan, dan pembuatan berbagai macam kontroller, sensor, aktuator, dan tranduser.
>Design Rangkaian / Sistem Elektronika
>Design Rangkaian / Sistem Instrumentasi
>Design Rangkaian / Sistem Kendali
>Kerjasama Riset (data atau peralatan)
>Kerjasama Produksi Produk-Produk KIT Elektronika
>Produksi Instrumentasi Elektronika

4. Jasa Pembuatan Proyek, Tugas Akhir, Tugas Laboratorium, PKM, Karya Ilmiah, SKRIPSI, dll

Like My Facebook

Popular Posts

Rabu, 13 Mei 2026

Arduino - Mendeteksi Short Press dan Long Press pada Button

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.  

0 on: "Arduino - Mendeteksi Short Press dan Long Press pada Button"