#define BLYNK_TEMPLATE_ID "TMPL6M2YUJgaP"
#define BLYNK_TEMPLATE_NAME "Door look system"
#define BLYNK_AUTH_TOKEN "m6IMvzNX-3-7z0Y0ysQZb4FG3yrIYiBH"
#define BLYNK_PRINT Serial
const int RELAY_PIN = 26;
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char ssid[] = "Wokwi-GUEST";
char password[] = "";
LiquidCrystal_I2C lcd(0x28, 16, 2);
#define Password_Length 5
char Data[Password_Length];
char Master[Password_Length] = "1234";
byte data_count = 0;
bool door = false;
char customKey;
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] = {19, 18, 5, 17};
byte colPins[COLS] = {16, 4, 0, 2};
Keypad customKeypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
unsigned long doorOpenTime = 5000;
BLYNK_WRITE(V0) {
int value1 = param.asInt();
//Serial.println(value);
if (value1 == 1) {
door = true;
digitalWrite(RELAY_PIN, HIGH);
lcd.clear();
lcd.print("Door is Open");
delay(2000);
} else {
door = false;
digitalWrite(RELAY_PIN,LOW);
lcd.clear();
lcd.print("Door is Close");
delay(2000);
}
}
void setup() {
// Serial.begin(115200);
lcd.init();
lcd.backlight();
pinMode(RELAY_PIN, OUTPUT);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, password);
digitalWrite(RELAY_PIN, LOW);
lcd.begin(16, 2);
lcd.print("Protected Door");
delay(2000);
lcd.clear();
}
bool isfirsttime = true;
long previstime = 0;
void loop() {
Blynk.run();
if (door) {
if (isfirsttime) {
previstime = millis();
isfirsttime = false;
}
unsigned long currentTime = millis();
customKey = customKeypad.getKey();
if (customKey == '#') {
lcd.clear();
digitalWrite(RELAY_PIN, LOW);
lcd.print("Door is closed");
// Serial.println("Relay is OFF");
delay(3000);
door = false;
isfirsttime = true;
} else if (customKey == 'A') {
changePassword();
} else {
lcd.setCursor(0, 0);
lcd.print("A to change PASS");
lcd.setCursor(0, 1);
lcd.print("# to close door ");
if (currentTime - previstime >= 5200) {
lcd.clear();
digitalWrite(RELAY_PIN, LOW);
lcd.print("Door is closed");
// Serial.println("Relay is OFF");
delay(3000);
door = false;
isfirsttime = true;
}
}
} else {
Open();
}
}
void clearData() {
while (data_count != 0) {
Data[data_count--] = 0;
}
return;
}
void changePassword() {
lcd.clear();
lcd.print("Enter New Pass");
while (data_count < Password_Length - 1) {
customKey = customKeypad.getKey();
if (customKey) {
Data[data_count] = customKey;
lcd.setCursor(data_count, 1);
lcd.print('*');
data_count++;
}
}
lcd.clear();
lcd.print("Password Changed");
strncpy(Master, Data, Password_Length);
delay(2000);
lcd.clear();
clearData();
}
void Open() {
lcd.setCursor(0, 0);
lcd.print("Enter Password");
customKey = customKeypad.getKey();
if (customKey) {
Data[data_count] = customKey;
lcd.setCursor(data_count, 1);
lcd.print('*');
data_count++;
}
if (data_count == Password_Length - 1) {
if (!strcmp(Data, Master)) {
lcd.clear();
digitalWrite(RELAY_PIN, HIGH);
lcd.print(" Door is Open ");
door = true;
doorOpenTime = millis();
Serial.println("Relay is ON");
delay(3000);
} else {
lcd.clear();
lcd.print(" Wrong Password ");
door = false;
digitalWrite(RELAY_PIN, LOW);
// Serial.println("Relay is OFF");
}
delay(1000);
lcd.clear();
clearData();
}
}