#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD I2C pada alamat 0x27 dengan ukuran 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definisi pin LED
const int led1 = 13;
const int led2 = 12;
const int led3 = 11;
const int led4 = 10;
// Definisi pin tombol
const int btn1 = 2;
const int btn2 = 3;
// Variabel untuk menyimpan status tombol
int val1 = 0;
int val2 = 0;
// Variabel untuk menyimpan jumlah tekan
int countBtn1 = 0;
int countBtn2 = 0;
// Variabel untuk debouncing tombol
unsigned long lastDebounceTime1 = 0;
unsigned long lastDebounceTime2 = 0;
const unsigned long debounceDelay = 200;
void setup() {
// Set mode pin
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(btn1, INPUT);
pinMode(btn2, INPUT);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Pesan awal
lcd.setCursor(0, 0);
lcd.print("PUSH YOUR BUTTON");
}
void loop() {
// Baca tombol (aktif HIGH)
int readBtn1 = digitalRead(btn1);
int readBtn2 = digitalRead(btn2);
// Jika tombol 1 ditekan
if (readBtn1 == HIGH && (millis() - lastDebounceTime1) > debounceDelay) {
lastDebounceTime1 = millis();
countBtn1++;
countBtn2 = 0; // reset counter btn2 saat btn1 ditekan
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("btn1 PUSH");
// Tentukan LED mana yang menyala berdasarkan jumlah tekan
switch (countBtn1) {
case 1:
showLed(led1, "led1 ON");
break;
case 2:
showLed(led2, "led2 ON");
break;
case 3:
showLed(led3, "led3 ON");
break;
case 4:
showLed(led4, "led4 ON");
countBtn1 = 0; // reset setelah 4 kali
break;
}
}
// Jika tombol 2 ditekan
if (readBtn2 == HIGH && (millis() - lastDebounceTime2) > debounceDelay) {
lastDebounceTime2 = millis();
countBtn2++;
countBtn1 = 0; // reset counter btn1 saat btn2 ditekan
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("btn2 PUSH");
// Tentukan LED mana yang menyala berdasarkan jumlah tekan
switch (countBtn2) {
case 1:
showLed(led4, "led4 ON");
break;
case 2:
showLed(led3, "led3 ON");
break;
case 3:
showLed(led2, "led2 ON");
break;
case 4:
showLed(led1, "led1 ON");
countBtn2 = 0; // reset setelah 4 kali
break;
}
}
// Jika tidak ada tombol ditekan, tampilkan pesan default
if (readBtn1 == LOW && readBtn2 == LOW) {
allLedOff();
lcd.setCursor(0, 0);
lcd.print("PUSH YOUR BUTTON ");
lcd.setCursor(0, 1);
lcd.print(" "); // bersihkan baris kedua
}
}
// Fungsi untuk menyalakan satu LED selama 2 detik dan tampilkan pesan di LCD
void showLed(int ledPin, const char* message) {
allLedOff();
digitalWrite(ledPin, HIGH);
lcd.setCursor(0, 1);
lcd.print(message);
delay(2000);
allLedOff();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PUSH YOUR BUTTON");
}
// Fungsi untuk mematikan semua LED
void allLedOff() {
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
}