#include <Keypad.h>
#include <TM1637Display.h>
#include <ESP32Servo.h>
// TM1637 Display Pins
#define CLK 2
#define DIO 4
TM1637Display display(CLK, DIO);
#define SERVO_PIN 5

// Define password
const String PASSWORD = "1234";
String input = "";

// Servo setup
Servo lockServo;
bool isUnlocked = false;

// Keypad setup
const byte ROWS = 4; 
const byte COLS = 4; 
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

byte rowPins[ROWS] = {32, 33, 25, 26}; 
byte colPins[COLS] = {27, 14, 12, 13}; 

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Password
String password = "";
String enteredCode = "";

void setup() {
  Serial.begin(115200);
  display.setBrightness(7);
  display.showNumberDec(0, true); // Show 0000

  // Attach servo and set to locked position
  lockServo.attach(SERVO_PIN);
  lockServo.write(0); // 0 degrees = locked
}

void loop() {
  char key = keypad.getKey();

  if (key) {
    if (key >= '0' && key <= '9') {
      if (enteredCode.length() < 4) {
        enteredCode += key;
        updateDisplay(enteredCode);
      }
    } else if (key == '#') {
      if (enteredCode == password) {
        Serial.println("Access Granted");
        unlockDoor();
      } else {
        Serial.println("Access Denied");
        displayError();
      }
      enteredCode = "";
    } else if (key == '*') {
      enteredCode = "";
      display.showNumberDec(0, true); // Reset display
    }
  }
}

void updateDisplay(String code) {
  int num = code.toInt();
  display.showNumberDec(num, true, 4, 0);
}

void unlockDoor() {
  lockServo.write(90); // Open position
  delay(5000); // Wait 5 seconds
  lockServo.write(0); // Lock again
  display.showNumberDec(0, true);
}

void displayError() {
  display.showNumberDec(0, true); // Reset to 0000
  // Optional: flash error or show "----" if supported
}
$abcdeabcde151015202530fghijfghij
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
4-Digit Display
sevseg1:CLK
sevseg1:DIO
sevseg1:VCC
sevseg1:GND
servo1:GND
servo1:V+
servo1:PWM