#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
}
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
sevseg1:CLK
sevseg1:DIO
sevseg1:VCC
sevseg1:GND
servo1:GND
servo1:V+
servo1:PWM