#10Pemula

Nyala/Mati LED dengan Tombol (On/Off)

4.8(100)
167 selesai
Nyala/Mati LED dengan Tombol (On/Off)
Tekan tombol sekali dan lampu menyala, tekan lagi dan lampu mati, persis seperti sakelar lampu di kamarmu. Arduino menyadari setiap tekanan dan membalik LED ke keadaan sebaliknya, sambil menunggu sebentar agar pantulan kecil di dalam tombol tidak membingungkannya. Cara paling sederhana membuat sakelar nyala-mati dengan satu tombol.

Video

Skema rangkaian

Nyala/Mati LED dengan Tombol (On/Off) - Circuit

Kode sumber

C++ (Arduino IDE)
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.