Menghidupkan dan Mematikan LED Menggunakan Satu Tombol Pada Arduino

Menghidupkan dan Mematikan LED Menggunakan Satu Tombol Pada Arduino. ON OFF LED dengan 1 Tombol.

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.

  1. 1x Arduino Uno.
  2. 1x Kabel jumper.
  3. 1x LED.
  4. 1x Tombol bertipe push button.
  5. 1x Resistor 220 Ohm.
  6. 1x Resistor 10 k Ohm.
  7. 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.

Rangkaian - Cara Menghidupkan dan Mematikan LED Menggunakan Satu Tombol

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

Komponen dan rangkaian yang digunakan pada tahap ini sama dengan sebelumnya.

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

Penghobi Elektronika