#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#define BUTTON_DOT 2
#define BUTTON_DASH 3
#define BUTTON_ENTER 4
#define TRIG_PIN 10
#define ECHO_PIN 11
String PASSWORD = "-.-.";
const int redd = 6;
const int greenn = 5;
const int bluee = 7;
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo doorServo;
String inputPassword = "";
bool standbyMode = true;
void setup() {
lcd.begin(16, 2);
lcd.backlight();
pinMode(BUTTON_DOT, INPUT_PULLUP);
pinMode(BUTTON_DASH, INPUT_PULLUP);
pinMode(BUTTON_ENTER, INPUT_PULLUP);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(redd, OUTPUT);
pinMode(greenn, OUTPUT);
pinMode(bluee, OUTPUT);
doorServo.attach(9);
doorServo.write(0);
}
void loop() {
long distance = measureDistance();
if (distance > 50) {
if (!standbyMode) {
lcd.clear();
delay(1000);
lcd.print("Smart Door Lock");
setRGB(0, 0, 0);
standbyMode = true;
}
} else {
if (standbyMode) {
lcd.clear();
delay(1000);
lcd.print("Enter Password:");
setRGB(0, 0, 255);
standbyMode = false;
}
handleButtonInput();
if (digitalRead(BUTTON_ENTER) == LOW) {
checkPassword();
delay(500);
}
}
}
long measureDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void handleButtonInput() {
if (digitalRead(BUTTON_DOT) == LOW) {
inputPassword += ".";
lcd.setCursor(0, 1);
lcd.print(inputPassword);
delay(200);
}
if (digitalRead(BUTTON_DASH) == LOW) {
inputPassword += "-";
lcd.setCursor(0, 1);
lcd.print(inputPassword);
delay(200);
}
}
void checkPassword() {
if (inputPassword == PASSWORD) {
lcd.clear();
lcd.print("Correct!");
setRGB(0, 255, 0);
doorServo.write(180);
delay(3000);
doorServo.write(0);
lcd.clear();
lcd.print("Smart Door Lock");
setRGB(0, 0, 0);
} else {
lcd.clear();
lcd.print("Incorrect!");
setRGB(255, 0, 0);
delay(2000);
lcd.clear();
delay(1000);
lcd.print("Enter Password:");
setRGB(0, 0, 255);
}
inputPassword = "";
standbyMode = true;
}
void setRGB(int red, int green, int blue) {
analogWrite(redd, red);
analogWrite(greenn, green);
analogWrite(bluee, blue);
}