Sebelum membahas rangkaian dan program Toggle Button, mari kita bahas dulu secara singkat tentang perbedaan antara Switch (Saklar) dan Push-Button atau Button (Tombol).
Switch dan Button memiliki fungsi yang sama, yaitu menghubungkan 2 kontak yang terpisah, sehingga arus listrik bisa mengalir dari terminal yang satu ke terminal yang lain. Atau, berfungsi untuk memutuskan 2 kontak yang terhubung, sehingga aliran arus akan terputus.
Jika ketika pada kondisi normal (tidak ditekan), kontak Switch atau Button terbuka (tidak terhubung), maka kontak tersebut disebut Normally-Open. Artinya pada kondisi normal, kontaknya tidak terhubung atau terbuka (open).
Sebaliknya, jika ketika pada kondisi normal (tidak ditekan), kontak Switch atau Button tertutup (terhubung), maka kontak tersebut disebut Normally-Closed.
Switch memiliki mekanisme dengan sistem pengunci.
Ketika kondisi switch berpindah dari OFF (OPEN) menjadi ON (CLOSE), maka kondisi switch akan tetap ON meskipun knob atau tuas switch kita lepaskan.
Demikian juga ketika kondisi switch berubah dari ON menjadi OFF, maka kondisi switch akan tetap OFF meskipun knob atau tuas switch dilepas.
Berbeda dengan Switch, Button tidak memiliki mekanisme pengunci.
Button menggunakan mekanisme spring (pegas) tanpa pengunci. Jadi perubahan kondisinya bersifat sementara.
Ketika knob Button ditekan, maka kontak akan terhubung. Dan ketika Button dilepas, maka kontak akan kembali terputus.
Nah, setelah jelas perbedaan antara Switch dan Button, sekarang kita bahas tentang apa itu Toggle-Button.
Yang dimaksud dengan Toggle-Button dalam tulisan ini adalah sebuah Button biasa yang dengan trik pemrograman sederhana berfungsi untuk mengubah nilai logika dari variabel status menjadi kebalikannya. OFF akan diubah menjadi ON. Dan ON akan diubah menjadi OFF. Atau LOW menjadi HIGH dan HIGH menjadi LOW.
Dalam sistem mikrokontroler, tentunya Toggle-Button ini tidak bekerja atau berdiri sendiri. Toggle-Button digunakan untuk mengontrol kondisi dari sebuah OUTPUT, semisal lampu LED.
Jadi, ketika Button ditekan (dan kemudian dilepas), maka LED akan menyala. Dan ketika ditekan lagi (dan kemudian dilepas lagi), maka LED akan padam.
Nah, sekarang kita langsung saja melakukan eksperimen untuk menjadikan sebuah tombol (button) biasa menjadi Toggle-Button.
Rangkaian dari eksperimen ini adalah sebagai berikut:

Dengan rangkaian seperti gambar di atas, sekarang kita buat program agar sistem bekerja dengan skenario sebagai berikut:
- Ketika Button ditekan, maka LED akan ON. Dan ketika Button dilepas, LED tetap ON.
- Ketika Button ditekan lagi, maka LED akan OFF. Dan ketika Button dilepas, LED teteap OFF.
Rangkaian LED yang digunakan adalah rangkaian LED Aktif-High. Jika Anda membutuhkan penjelasan lebih detil mengenai Rangkaian LED Aktif-High dan Aktif-Low, silakan membaca postingan pada link berikut ini.
Baca juga: Rangkaian LED Aktif-Low dan Aktif-High Beserta Contoh Program AVR-GCC dan IDE Arduino
Nah, berikut ini adalah kode program atau skrip Arduino untuk menghasilkan kerja dengan skenario di atas.
#define LED 8 #define BUTTON 9 int LED_IS_ON = false; void setup() { pinMode(LED, OUTPUT); pinMode(BUTTON, INPUT_PULLUP); } void loop() { if (digitalRead(BUTTON)==LOW) { delay(50); if (digitalRead(BUTTON)==LOW) { if (LED_IS_ON==false) { LED_IS_ON = true; digitalWrite(LED, HIGH); } else if (LED_IS_ON==true) { LED_IS_ON = false; digitalWrite(LED, LOW); } while (digitalRead(BUTTON)==LOW); } } }
Rangkai rangkaian seperti gambar di atas dan upload kode program di atas, maka Anda akan mendapatkan contoh Fungsi ON-OFF Satu Tombol atau Toggle-Button.
Penjelasan Program
Pada bagian atas, program mendefinisikan LED dengan nilai 8 dan Button dengan nilai 9. Kemudian, program mendeklrasasikan variabel LED_IS_ON dengan tipe data integer dengan nilai awal false (nol / low).
Selanjutnya, program melakukan inisialisasi GPIO. Inisialisasi ini dikerjakan dalam fungsi setup().
Sekarang kita masuk ke dalam fungsi loop().
Pertama-tama, program mendeteksi apakah Button ditekan atau tidak. Fungsi yang digunakan untuk membaca kondisi pin adalah: digitalRead()
if (digitalRead(BUTTON)==LOW) { delay(50); if (digitalRead(BUTTON)==LOW) { //... }
Jika BUTTON = LOW (ditekan), maka program akan melakukan delay sesaat (50ms). Setelah delay(50), maka kembali program mendeteksi apakah tombol ditekan (BUTTON = LOW).
Jika setelah delay(50); ternyata kondisi BUTTON masih LOW, maka program akan mengganggap bahwa memang benar tombol ditekan dan penekanannya sudah mantap dan program akan melakukan proses TOGGLING.
Penggunaan delay ini dikenal dengan debounce delay untuk mecanical switch/button.
Btw, nominal delay untuk memastikan kondisi logika BUTTON pada kode program di atas tidaklah baku, silakan bereksperimen dengan mengubah-ubah nilai nominal delay pada kode program di atas.
if (digitalRead(BUTTON)==LOW) { if (LED_IS_ON==false) { LED_IS_ON = true; digitalWrite(LED, HIGH); } else if (LED_IS_ON==true) { LED_IS_ON = false; digitalWrite(LED, LOW); } while (digitalRead(BUTTON)==LOW); }
Proses TOGGLING pada nilai variabel LED_IS_ON pada kode program di atas sengaja saya buat seperti itu (tanpa trik) supaya lebih mudah dipahami.
Jika LED_IS_ON = FALSE (low), maka ubah nilai LED_IS_ON menjadi TRUE dan nyalakan LED (LED = HIGH).
Sebaliknya, jika LED_IS_ON = TRUE, maka ubah nilai LED_IS_ON menjadi FALSE dan padamkan LED (LED = LOW).
Adapun perulangan while di bagian bawah berfungsi untuk MENUNGGU sampai tombol dilepas.
while (digitalRead(BUTTON)==LOW);
Artinya adalah “selama tombol ditekan, maka tunggu…”
Jadi dengan kode program di atas, maka sesaat setelah tombol ditekan, LED akan berubah kondisi sebelum tombol dilepas.
Nah, sebagai bahan latihan, silakan Anda modifikasi kode program di atas agar LED berubah kondisi setelah tombol dilepas.
Semoga bermanfaat. Selamat belajar. Selamat berkarya.
Hubungi Kami
Teknik Elektro Links melayani perancangan dan pembuatan sistem kontrol dan monitoring berbasis mikrokontroler. Kami menggunakan beberapa tipe mikrokontroler antara lain: MCS51, AVR, PIC, STM8, Arduino, ESP8266, ESP32.
Untuk panel kontrol industri, selain menggunakan beberapa tipe mikrokontroler yang sudah teruji baik di industri, kami menggunakan Zelio Smart-Relay.
Kami juga melayani pembuatan program aplikasi untuk platform Windows, Linux dan Raspberry Pi.
Whatsapp: 0882-3560-7047.