#include <Keypad.h>
#include <Servo.h>
Servo lockServo;
const int servoPin = D6;
const int buzzerPin = D11;
const int greenLed = D12;
const int redLed = D13;
const int exitButton = A0;
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] = {D2, D3, D4, D5};
byte colPins[COLS] = {D7, D8, D9, D10};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
String correctPin = "1234";
String enteredPin = "";
void successSound() {
tone(buzzerPin, 1200, 150);
delay(200);
tone(buzzerPin, 1800, 200);
delay(250);
noTone(buzzerPin);
}
void failSound() {
for (int i = 0; i < 3; i++) {
tone(buzzerPin, 400, 150);
delay(200);
}
noTone(buzzerPin);
}
void unlockDoor() {
Serial.println("DOOR UNLOCKED");
digitalWrite(redLed, LOW);
digitalWrite(greenLed, HIGH);
successSound();
lockServo.write(90);
delay(3000);
lockServo.write(0);
digitalWrite(greenLed, LOW);
digitalWrite(redLed, HIGH);
Serial.println("DOOR LOCKED AGAIN");
}
void setup() {
Serial.begin(115200);
lockServo.attach(servoPin);
pinMode(buzzerPin, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(exitButton, INPUT_PULLUP);
// Start locked
lockServo.write(0);
digitalWrite(greenLed, LOW);
digitalWrite(redLed, HIGH);
Serial.println("SMART DOOR LOCK READY");
Serial.println("Enter PIN and press #");
}
void loop() {
if (digitalRead(exitButton) == LOW) {
Serial.println("EXIT BUTTON PRESSED");
unlockDoor();
while (digitalRead(exitButton) == LOW) {
}
delay(50);
}
char key = keypad.getKey();
if (key) {
Serial.print("Key: ");
Serial.println(key);
if (key == '*') {
enteredPin = "";
Serial.println("PIN CLEARED");
}
else if (key == '#') {
if (enteredPin == correctPin) {
Serial.println("CORRECT PIN");
unlockDoor();
}
else {
Serial.println("WRONG PIN");
digitalWrite(greenLed, LOW);
digitalWrite(redLed, HIGH);
failSound();
}
enteredPin = "";
}
else if (key >= '0' && key <= '9') {
enteredPin += key;
Serial.print("PIN: ");
Serial.println(enteredPin);
}
}
}