
Video
Skema rangkaian

Kode sumber
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Nyala/Mati LED dengan Tombol (On/Off)
4// ─────────────────────────────────────────
5// Setiap tekanan tombol membalik LED satu kali (nyala/mati). Kode hanya
6// menangkap momen tekanan (LOW -> HIGH); menahan tombol tidak membuat LED
7// berkedip. Jeda 50 ms mengabaikan pantulan tombol (bounce).
8//
9// Pin:
10// D13 -> Tombol, kaki lainnya ke 5V
11// D13 -> Resistor 10k ke GND (pull-down)
12// D7 -> LED (dengan resistor 330 ohm)
13
14int ledState = 0; // Status LED: 0 = mati, 1 = nyala
15int lastButton = 0; // Pembacaan tombol sebelumnya
16
17void setup() {
18 pinMode(13, INPUT); // Input tombol (pull-down eksternal)
19 pinMode(7, OUTPUT); // Output LED
20}
21
22void loop() {
23 int button = digitalRead(13); // Baca tombol
24 if (button != lastButton) { // Status tombol berubah
25 if (button == 1) { // Hanya ketika ditekan (LOW -> HIGH)
26 ledState = !ledState; // Balik statusnya
27 digitalWrite(7, ledState);
28 }
29 delay(50); // Jeda singkat untuk melewati bounce
30 lastButton = button; // Simpan pembacaan ini
31 }
32}
33
FAQ
Apa itu debounce, dan kenapa diperlukan?
Ketika tombol mekanis ditekan, kontaknya membuka dan menutup berkali-kali dalam beberapa milidetik (memantul). Arduino bisa menganggapnya sebagai beberapa tekanan, dan LED berakhir di keadaan acak. Debounce mengabaikan pantulan ini dengan menunggu sebentar (mis. 50 ms) setelah keadaan berubah.
Kadang LED tidak berubah, atau berubah dua kali, kenapa?
Biasanya debounce-nya tidak ada atau terlalu singkat. Selain itu, kamu hanya perlu mendeteksi momen tombol "ditekan" (keadaan sebelumnya: LOW, keadaan baru: HIGH); jika keadaan berubah di setiap siklus selama tombol ditahan, LED akan berkedip dan berakhir di keadaan acak.
Apa fungsi variabel keadaan?
Variabel ini mencatat apakah LED sedang menyala atau mati. Di setiap tekanan yang sah, variabelnya dibalik (ledStatus = !ledStatus), dan LED diatur sesuai nilainya.
Bisakah aku mengendalikan LED yang berbeda dengan beberapa tombol?
Bisa, cukup simpan pin terpisah, keadaan sebelumnya yang terpisah, dan variabel keadaan LED yang terpisah untuk setiap tombol. Jika kamu memakai banyak tombol, array dan kode debounce berbasis millis() akan lebih rapi.
