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.

  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

/* State change detection (edge detection)
 /* created  27 Sep 2005
 /* modified 30 Aug 2011
 /* by Tom Igoe
 /* This example code is in the public domain.
 /* http://www.arduino.cc/en/Tutorial/ButtonStateChange */

// Konstanta ini tidak akan berubah:
// Pin dimana tombol terhubung
const int  buttonPin = 2;
// Pin dimana LED terhubung
const int ledPin = 13;

// Variabel yang dapat berubah:
// Penghitung berapa kali tombol ditekan
int buttonPushCounter = 0;
// Kondisi tombol terkini
int buttonState = 0;
// Kondisi tombol sebelumnya
int lastButtonState = 0;

void setup() {
 // Menginisialisasi pin tombol sebagai input:
 pinMode(buttonPin, INPUT);
 // Menginisialisasi pin LED sebagai output:
 pinMode(ledPin, OUTPUT);
 // Menginisisalisasi komunikasi serial:
 Serial.begin(9600);
}

void loop() {
 // Membaca kondisi pin pushbutton:
 buttonState = digitalRead(buttonPin);
 // Membandingkan kondisi tombol (buttonState) dengan sebelumnya (lastButtonState):
 if (buttonState != lastButtonState) {
   // Jika kondisi berubah, tingkatkan counter (penghitung):
   if (buttonState == HIGH) {
     // Jika kondisi adalah HIGH makan tombol akan beralih dari off ke on:
     buttonPushCounter++;
     Serial.println("on");
     Serial.print("banyaknya tombol telah ditekan: ");
     Serial.println(buttonPushCounter);
   } else {
     // Jika kondisi adalah LOW makan tombol akan beralih dari on ke off:
     Serial.println("off");
   }
   // Penundaan untuk kestabilan sistem:
   delay(50);
 }
 // Menyimpan kondisi tombol sekarang sebagai kondisi sebelumnya
 // untuk looping selanjutnya:
 lastButtonState = buttonState;
 // Menghidupkan led apabila banyaknya tombol ditekan merupakan kelipatan 2
 // dengan menggunakan operator modulo/modulus. Modulo akan memberikan sisa
 // pembagian antara dua buah nilai:
 if (buttonPushCounter % 2 == 0) {
   digitalWrite(ledPin, HIGH);
 } else {
   digitalWrite(ledPin, LOW);
 }
}

Penjelasan Kode Program - Menghidupkan dan Mematikan LED Menggunakan Satu Tombol

Bagaimana program di atas bekerja? Intinya sistem akan mendeteksi perubahan kondisi tombol, setiap 1 kali perubahan kondisi tombol akan ditandai sebagai 1 kali tombol ditekan. Banyaknya tombol ditekan akan disimpan oleh sistem ke dalam variabel buttonPushCounter.

Kemudian nilai yang berada pada variabel buttonPushCounter akan dimodulo dengan angka 2. Seperti yang telah disinggung pada komen program bahwa modulo merupakan salah satu operasi yang akan menghasilkan sisa bagi dari dua buah nilai, dalam hal ini buttonPushCounter dengan angka 2.

Jadi apabila banyaknya tombol ditekan merupakan kelipatan dari angka 2 (4, 6, 8, ...) maka hasil modulo akan 0 karena tidak terdapat sisa bagi. Jika hal ini terjadi maka LED akan hidup, namun jika buttonPushCounter bukan kelipatan 2 maka LED akan mati, berikut baris programnya.

if (buttonPushCounter % 2 == 0) {
 digitalWrite(ledPin, HIGH);
} else {
 digitalWrite(ledPin, LOW);
}

Angka 2 dapat diubah sesuka hati, misalnya menjadi 4. Maka LED akan hidup setelah tombol ditekan sebayak 4 kali.

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

Dengan menggunakan komponen-komponen yang sudah disebutkan di atas, berikut rangkaian yang kita perlukan untuk menguji program.

Kode Program - Menggunakan Pin Interrupt

const int  buttonPin = 2;
const int ledPin = 13;
volatile byte state = LOW;

void setup() {
 pinMode(ledPin, OUTPUT);
 pinMode(buttonPin, INPUT_PULLUP);
 attachInterrupt(digitalPinToInterrupt(buttonPin), blink, FALLING);
}

void loop() {
 digitalWrite(ledPin, state);
}

void blink() {
 state = !state;
}

Kata kunci terkait: On Off Led dengan Satu Tombol