#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
// Konfigurasi LCD (Alamat I2C 0x27, 16 karakter, 2 baris)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Konfigurasi Keypad
const byte ROWS = 4; // Empat baris
const byte COLS = 4; // Empat kolom
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; // Pin baris pada Arduino
byte colPins[COLS] = {5, 4, 3, 2}; // Pin kolom pada Arduino
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Konfigurasi Relay
const int relayPin = 10;
bool lampState = false;
unsigned long relayActivatedTime = 0; // Waktu ketika relay dinyalakan
const unsigned long relayOnDuration = 2500; // Durasi relay menyala (5 detik)
// Password
String password = "1234"; // Password awal
String inputPassword = ""; // Password yang dimasukkan
bool isChangingPassword = false; // Status mengganti password
void setup() {
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Inisialisasi Relay
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW);
// Menampilkan pesan awal pada LCD
lcd.setCursor(0, 0);
lcd.print("Masukkan Pass:");
}
void loop() {
char key = keypad.getKey();
if (key) {
if (key == '#') {
if (isChangingPassword) {
// Cek password lama
if (inputPassword == password) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Masukkan Baru:");
inputPassword = "";
isChangingPassword = false; // Siap untuk password baru
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pass Salah! ");
delay(2000); // Tampilkan pesan selama 2 detik
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Masukkan Pass:");
inputPassword = "";
}
} else {
// Cek password
if (inputPassword == password) {
lampState = !lampState;
if (lampState) {
digitalWrite(relayPin, HIGH);
relayActivatedTime = millis(); // Catat waktu ketika relay dinyalakan
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Lampu: ON ");
} else {
digitalWrite(relayPin, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Lampu: OFF ");
}
// Hapus password setelah digunakan
delay(2500); // Tampilkan status selama 2 detik
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Masukkan Pass:");
inputPassword = "";
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pass Salah! ");
delay(2000); // Tampilkan pesan selama 2 detik
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Masukkan Pass:");
inputPassword = "";
}
}
} else if (key == '*') {
if (isChangingPassword) {
// Batalkan pengaturan password baru
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pengaturan Batal");
delay(2000); // Tampilkan pesan selama 2 detik
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Masukkan Pass:");
inputPassword = "";
isChangingPassword = false;
} else {
// Masukkan mode ganti password
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Masukkan Lama: ");
inputPassword = "";
isChangingPassword = true;
}
} else {
// Tambahkan karakter ke password
inputPassword += key;
lcd.setCursor(0, 1);
lcd.print("Pass: ");
lcd.print(inputPassword);
}
}
// Matikan relay otomatis setelah waktu yang ditentukan
if (lampState && (millis() - relayActivatedTime >= relayOnDuration)) {
digitalWrite(relayPin, LOW); // Matikan relay
lampState = false;
}
}