Menghidupkan dan Mematikan LED Menggunakan Satu Tombol Pada Arduino
Menghidupkan dan mematikan LED menggunakan satu tombol pada Arduino sekilas mungkin terlihat mudah bagi yang sudah lama mengenal Arduino, namun bagi yang baru saja mempelajari Arduino tentu akan sulit untuk merancang programnya.
Jika biasanya kita menggunakan 2 buah tombol, kali ini kita akan menggunakan hanya satu tombol untuk menghidupkan dan mematikan LED. Jadi apabila tombol ditekan, maka LED akan menyala (ON), kemudian jika tombol kembali ditekan, maka LED akan mati (OFF) dan begitu seterusnya.
Untuk membuat program yang dapat menghidupkan dan mematikan LED menggunakan satu tombol, yang perlu kita ketahui adalah kondisi ketika tombol berubah logika, misal dari HIGH ke LOW ataupun dari LOW ke HIGH, hal ini biasa disebut State change detection (edge detection).
Jika Anda menyadari, sebenarnya kode program State change detection (edge detection) adalah salah satu dari example di dalam software Arduino IDE. Beberapa komponen yang digunakan dalam artikel ini adalah sebagai berikut.
- 1x Arduino Uno.
- 1x Kabel jumper.
- 1x LED.
- 1x Tombol bertipe push button.
- 1x Resistor 220 Ohm.
- 1x Resistor 10 k Ohm.
- 1x Breadboard.
Rangkaian - Menghidupkan dan Mematikan LED Menggunakan Satu Tombol
Dengan menggunakan komponen-komponen yang sudah disebutkan di atas, berikut rangkaian yang kita perlukan untuk menguji program.
Kode Program - Menghidupkan dan Mematikan LED Menggunakan Satu Tombol
const int buttonPin = 2; const int ledPin = 13; bool lastButtonState = LOW; // status tombol terakhir bool ledState = LOW; // status LED void setup() { pinMode(buttonPin, INPUT); // tombol sebagai input pinMode(ledPin, OUTPUT); // LED sebagai output } void loop() { bool buttonState = digitalRead(buttonPin); // cek status tombol if (buttonState != lastButtonState) { // jika status tombol berubah dari sebelumnya if (buttonState == LOW) { // jika tombol berubah ke status LOW (dilepas) if (ledState == HIGH) { // jika status LED hidup digitalWrite(ledPin, LOW); // maka LED dimatikan ledState = LOW; } else { // jika status LED mati digitalWrite(ledPin, HIGH); // maka LED dihidupkan ledState = HIGH; } } delay(50); // debounching } lastButtonState = buttonState; // simpan status tombol untuk loop selanjutnya }
Penjelasan Kode Program - Menghidupkan dan Mematikan LED Menggunakan Satu Tombol
Sebelumnya kita perlu memahami, berdasarkan rangkaian yang kita gunakan, tombol akan berstatus HIGH jika ditekan dan akan LOW jika dilepas. Pada program di atas, kita mencoba untuk mendeteksi ketika perubahan status tombol terjadi.
Ketika tombol ditekan, perubahan status tombol adalah dari LOW ke HIGH. Sedangkan ketika tombol di lepas, perubahan status tombol adalah dari HIGH ke LOW. Pada program di atas, kita hanya menggunakan perubahan status tombol dari HIGH ke LOW (tombol dilepas).
Oleh karena itu jika kita amati, LED akan berubah ketika saat tombol dilepas.
Lanjut, ketika tombol dilepas, selanjutnya kita akan mengecek status LED. Jika status LED sekarang sedang ON, maka kita akan matikan. Sebaliknya jika status LED sekarang sedang OFF, maka kita hidupkan.
Cara yang Lebih Mudah dengan Menggunakan Interrupt
Ada cara yang lebih mudah untuk menghidupkan dan mematikan led dengan 1 tombol, yaitu dengan menggunakan Interupsi atau Interrupt. Cara ini akan menyederhanakan kode program yang kita gunakan.
Namun untuk melakukannya kita membutuhkan pin interrupt. Kekurangan dari metode ini adalah jumlah pin interrupt biasanya terbatas pada mikrokontroler umum, seperti ATmega328 yang hanya memiliki 2 buah pin interrupt.
Rangkaian - Menggunakan Pin Interrupt
Kode Program - Menggunakan Pin Interrupt
Penjelasan terkait dengan interrupt dapat dilihat pada laman attachInterrupt()
const byte buttonPin = 2; const byte ledPin = 13; volatile byte state = LOW; unsigned long lastDebounceTime = 0; const byte debounceDelay = 50; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); attachInterrupt(digitalPinToInterrupt(buttonPin), blink, FALLING); } void loop() { } void blink() { if (millis() - lastDebounceTime > debounceDelay) { state = !state; digitalWrite(ledPin, state); lastDebounceTime = millis(); } }
Kata kunci terkait: On Off Led dengan Satu Tombol
Gabung dalam percakapan