#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int tombolPin = 12;
const int led1Pin = 26;
const int led2Pin = 25;
LiquidCrystal_I2C lcd(0x27, 16, 2);
unsigned long startTime = 0;
bool tombolDitekan = false;
bool led2Nyala = false;
bool tombolSudahDilepas = true; // Penting untuk toggle LED2
void setup() {
pinMode(tombolPin, INPUT_PULLUP);
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Siap Tekan Tombol");
}
void loop() {
bool tombolSekarang = digitalRead(tombolPin) == LOW;
if (!led2Nyala) {
// Mode menunggu tombol ditekan lama 30 detik
if (tombolSekarang) {
if (!tombolDitekan) {
tombolDitekan = true;
startTime = millis();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tahan 30 detik");
}
digitalWrite(led1Pin, HIGH);
unsigned long durasi = millis() - startTime;
int detik = durasi / 1000;
lcd.setCursor(0, 1);
lcd.print("Timer: ");
lcd.print(detik);
lcd.print(" detik ");
if (durasi >= 30000) {
digitalWrite(led1Pin, LOW);
digitalWrite(led2Pin, HIGH);
led2Nyala = true;
tombolDitekan = false;
tombolSudahDilepas = false; // Karena tombol masih ditekan pas led nyala
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Selesai 30 detik");
lcd.setCursor(0, 1);
lcd.print("LED2 Menyala");
}
} else if (tombolDitekan) {
// Tombol dilepas sebelum 30 detik, reset
tombolDitekan = false;
digitalWrite(led1Pin, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tombol Dilepas");
lcd.setCursor(0, 1);
lcd.print("Timer di-reset");
}
} else {
// LED2 nyala (lock on)
digitalWrite(led1Pin, LOW);
digitalWrite(led2Pin, HIGH);
if (!tombolSekarang) {
tombolSudahDilepas = true; // Pastikan tombol dilepas dulu sebelum toggle
}
if (tombolSekarang && tombolSudahDilepas) {
// Tombol ditekan ulang setelah dilepas untuk mematikan LED2
digitalWrite(led2Pin, LOW);
led2Nyala = false;
tombolSudahDilepas = false;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("LED2 Dimatikan");
lcd.setCursor(0, 1);
lcd.print("Tekan ulang");
}
}
delay(100);
}