Tombol merupakan salah satu komponen yang sering digunakan dalam pengembangan proyek elektronika, terutama pada platform mikrokontroler seperti Arduino. Selain digunakan untuk memasukkan input dari pengguna, tombol juga dapat dimanfaatkan untuk mengontrol berbagai fungsi pada perangkat yang dikembangkan.
Dalam artikel ini, kita akan membahas beberapa program yang dapat dibuat menggunakan tombol pada Arduino, antara lain program klik biasa, klik dan tahan, serta klik 2x seperti pada mouse.
- Program Klik Biasa
Program klik biasa pada tombol merupakan program yang paling sederhana. Program ini hanya akan mengirimkan sinyal pada saat tombol ditekan dan dilepaskan. Berikut adalah contoh program klik biasa pada tombol menggunakan metode debounce manual:
const int buttonPin = 2;
int buttonState = HIGH;
int lastButtonState = HIGH;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
void setup() {
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH);
Serial.begin(9600);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
Serial.println("Button Pressed");
} else {
Serial.println("Button Released");
}
}
}
lastButtonState = reading;
}
Pada program di atas, debounce dilakukan secara manual menggunakan metode delay dan pengecekan waktu pada fungsi millis()
. Cara ini kurang efisien karena program harus menunggu selama debounceDelay
milidetik sebelum membaca input selanjutnya dari tombol.
Dalam beberapa kasus, menggunakan delay untuk debounce juga dapat mempengaruhi responsifitas program terhadap input. Dalam hal ini, attach interrupt akan lebih cocok untuk digunakan karena tidak perlu menunggu program selesai.
- Program Klik dan Tahan
Program klik dan tahan pada tombol memungkinkan pengguna untuk mengontrol perangkat dengan menekan tombol dalam waktu yang lebih lama. Sebagai contoh, program ini dapat digunakan untuk mengatur kecepatan motor atau mengubah nilai pada sebuah variabel.
Berikut adalah contoh program klik dan tahan pada tombol menggunakan attach interrupt:
const int buttonPin = 2;
int buttonState = HIGH;
unsigned long pressTime = 0;
unsigned long releaseTime = 0;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(buttonPin), buttonPressed, FALLING);
Serial.begin(9600);
}
void loop() {
if (buttonState == LOW) {
if ((millis() - pressTime) >= 500) {
Serial.println("Button Pressed and Held");
}
}
if (releaseTime != 0 && (millis() - releaseTime) >= 50) {
buttonState = digitalRead(buttonPin);
releaseTime = 0;
}
}
void buttonPressed() {
buttonState = LOW;
pressTime = millis();
}
void buttonReleased() {
releaseTime = millis();
}
Pada program di atas, attach interrupt digunakan untuk membaca input dari tombol. Saat tombol ditekan, fungsi buttonPressed()
akan dijalankan dan menandai bahwa tombol sedang ditekan dengan mengubah nilai variabel buttonState
menjadi LOW
. Selanjutnya, pada loop program, nilai variabel pressTime
akan diatur menjadi waktu saat tombol ditekan.
Apabila tombol ditekan dalam waktu lebih dari 500 milidetik, maka program akan mencetak pesan "Button Pressed and Held" pada Serial Monitor. Setelah tombol dilepaskan, fungsi buttonReleased()
akan dijalankan dan menandai bahwa tombol telah dilepaskan dengan menyetel variabel releaseTime
menjadi waktu saat tombol dilepaskan. Kemudian, pada loop program, program akan menunggu selama 50 milidetik sebelum membaca input selanjutnya dari tombol.
- Program Klik 2 kali (seperti Mouse)
Program klik 2x pada tombol mirip dengan program klik biasa, namun dengan tambahan fitur untuk mendeteksi apabila tombol ditekan dua kali secara cepat. Contoh penggunaan program ini dapat ditemukan pada mouse, di mana tombol kiri digunakan untuk mengklik dan tombol kanan digunakan untuk mengakses menu konteks.
Berikut adalah contoh program klik 2x pada tombol menggunakan attach interrupt:
const int buttonPin = 2;
int buttonState = HIGH;
int lastButtonState = HIGH;
unsigned long firstClickTime = 0;
unsigned long secondClickTime = 0;
bool clickInProgress = false;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(buttonPin), buttonPressed, FALLING);
Serial.begin(9600);
}
void loop() {
if (clickInProgress && (millis() - secondClickTime) >= 300) {
clickInProgress = false;
Serial.println("Button Double Clicked");
}
}
void buttonPressed() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastButtonState = reading;
if (reading == LOW) {
if (!clickInProgress) {
clickInProgress = true;
firstClickTime = millis();
} else {
clickInProgress = false;
secondClickTime = millis();
}
}
}
}
Pada program di atas, fungsi buttonPressed()
akan dijalankan setiap kali tombol ditekan dan dilepaskan. Saat tombol ditekan, program akan menandai waktu pertama kali tombol ditekan pada variabel firstClickTime
. Apabila tombol ditekan lagi dalam waktu kurang dari 300 milidetik, maka program akan menandai waktu kedua kalinya tombol ditekan pada variabel secondClickTime
dan mencetak pesan "Button Double Clicked" pada Serial Monitor.
Jadi, program di atas hanya mendeteksi klik 2x secara berurutan. Artinya, jika tombol ditekan tiga kali atau lebih, program hanya akan mendeteksi dua klik pertama dan mengabaikan klik selanjutnya.
Dari ketiga contoh program di atas, terlihat bahwa penggunaan attach interrupt pada tombol dapat mempermudah pembacaan input dan mengurangi masalah debouncing yang sering terjadi pada pembacaan input yang dilakukan secara manual. Selain itu, program juga dapat diatur untuk mendukung fitur-fitur lain seperti "klik dan tahan" atau "klik 2 kali". Meskipun demikian, penggunaan attach interrupt juga memiliki kelemahan, yaitu jumlah interrupt yang tersedia pada board Arduino terbatas. Oleh karena itu, penggunaan attach interrupt harus dipertimbangkan secara matang terlebih dahulu.
Dalam artikel sebelumnya, kita telah mempelajari cara menggunakan dan apa itu attach interrupt pada Arduino. Dan pada artikel ini kita bisa tahu bahwa ternyata attach interrupt bisa digunakan untuk membaca input tombol dengan berbagai fitur seperti klik tahan dan klik 2 kali.
Ketiga contoh program yang telah dibahas dapat dijadikan dasar untuk membuat program-program yang lebih kompleks dengan fitur-fitur tambahan lainnya. Dalam membuat program, selalu perhatikan kelemahan dan kelebihan dari penggunaan attach interrupt agar program dapat berjalan dengan lancar dan responsif terhadap input dari tombol.
Semoga artikel ini dapat membantu dan menginspirasi Anda dalam membuat proyek-proyek yang menarik dengan Arduino.