#include <Keypad.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// LED Indikator
#define LED_MERAH 15
#define LED_HIJAU 4
// ---------------- KEYpad Setup ----------------
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {13, 12, 14, 27};
byte colPins[COLS] = {26, 25, 33, 32};
Keypad keypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
String inputPassword = "";
const String password = "1234"; // ---- Password bisa kamu ganti ----
void setup() {
Serial.begin(115200);
pinMode(LED_MERAH, OUTPUT);
pinMode(LED_HIJAU, OUTPUT);
digitalWrite(LED_MERAH, LOW);
digitalWrite(LED_HIJAU, LOW);
Wire.begin(21, 22); // SDA = 21, SCL = 22 (default ESP32)
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED gagal!");
for (;;);
}
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Door Lock");
display.setTextSize(1);
display.println("Masukkan Kode:");
display.display();
}
void loop() {
char key = keypad.getKey();
if (key) {
Serial.println(key);
// Jika reset input dengan *
if (key == '*') {
inputPassword = "";
}
// Jika cek password dengan #
else if (key == '#') {
cekPassword();
inputPassword = "";
}
else {
inputPassword += key;
}
// Tampilkan input di OLED
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 0);
display.println("Kode:");
display.setCursor(0, 30);
display.println(inputPassword);
display.display();
}
}
void cekPassword() {
display.clearDisplay();
if (inputPassword == password) {
// Password benar
digitalWrite(LED_HIJAU, HIGH);
digitalWrite(LED_MERAH, LOW);
display.setTextSize(2);
display.setCursor(0, 0);
display.println("ACCESS");
display.println("GRANTED");
}
else {
// Password salah
digitalWrite(LED_HIJAU, LOW);
digitalWrite(LED_MERAH, HIGH);
display.setTextSize(2);
display.setCursor(0, 0);
display.println("ACCESS");
display.println("DENIED");
}
display.display();
delay(2000);
// Kembali ke tampilan awal
digitalWrite(LED_MERAH, LOW);
digitalWrite(LED_HIJAU, LOW);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 0);
display.println("Kode:");
display.display();
}