83 lines
1.8 KiB
C++
83 lines
1.8 KiB
C++
#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();
|
|
}
|