#include "logic_keypad.h" #include "cek_kamera.h" #define BUZZER 13 #define RELAY 3 void setup() { pinMode(BUZZER, OUTPUT); pinMode(RELAY, OUTPUT); digitalWrite(RELAY, HIGH); Serial.begin(9600); lcd.init(); lcd.backlight(); if (!cekKoneksiKamera()) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Kamera Error"); lcd.setCursor(0, 1); lcd.print("Periksa Sistem"); while (true); } checkLockoutFromEEPROM(); bool pinUpdated = false; unsigned long startWait = millis(); const unsigned long timeout = 5000; // Tunggu 5 detik while (millis() - startWait < timeout) { if (Serial.available()) { String command = Serial.readStringUntil('\n'); command.trim(); if (command == "resetpin") { savePINToEEPROM("000000"); storedPIN = "000000"; isFirstTime = true; lcd.clear(); centerText("Silakan Tambah", 0); centerText("Wajah PIN di Web", 1); soundUbahPIN(); pinUpdated = true; break; } else if (command.startsWith("setpin:")) { String newPIN = command.substring(7); savePINToEEPROM(newPIN); storedPIN = newPIN; isFirstTime = false; pinUpdated = true; break; } } } // Jika tidak ada kiriman dari ESP32-CAM, cek EEPROM manual if (!pinUpdated) { checkEEPROMForPIN(); if (storedPIN == "000000") { isFirstTime = true; lcd.clear(); centerText("Silakan Tambah", 0); centerText("Wajah PIN Website", 1); soundUbahPIN(); } } // Jika sudah punya PIN valid, siap input if (!isFirstTime) { lcd.clear(); centerText("INPUT PIN", 0); resetInput(); // siap mode input } } void loop() { handleSerialFromESP32(); handleKeypadLogic(); }