//ttps://wokwi.com/projects/416730474971197441
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {13,12,14,27}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {26,25,33,32}; //connect to the column pinouts of the keypad
//initialize an instance of class NewKeypad
Keypad keypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
#define redLed 22
#define piezo 23 //D23
#define passLed 21
#define greenLed 19
#define relay1 18
bool x=false;
bool lockStatus = false;
int otp =1432;
int keyIndex= 0;
String pressedKeys = "";
String passwordChanged = "";
String passwordString = "1432";
void setup()
{
Serial.begin(9600);
Serial.println("\nOTP Project");
pinMode(redLed,OUTPUT);
pinMode(relay1, OUTPUT);
pinMode(piezo,OUTPUT);
pinMode(passLed, OUTPUT);
pinMode(greenLed, OUTPUT);
digitalWrite(redLed,x);
digitalWrite(relay1, HIGH);
digitalWrite(greenLed, HIGH);
}
void loop()
{
char key = keypad.getKey();
if(key){
digitalWrite(piezo, HIGH);
delay(100);
digitalWrite(piezo, LOW);
if (keyIndex == 5){
String temp =pressedKeys+=(key);
String lastTwo = temp.substring(temp.length() - 2);
Serial.println("Last two characters: " + lastTwo);
if (lastTwo == "CA")
{
digitalWrite(passLed, HIGH);
passwordChanged = temp.substring(0,4);
Serial.println("passwordChanged: " + passwordChanged);
passwordString = passwordChanged;
delay(1000);
digitalWrite(passLed, LOW);
}
keyIndex= 0;
pressedKeys = "";
}
else if(keyIndex == 4 && key=='D'){
Serial.print("keyIndex:");
Serial.println(keyIndex);
String temp = pressedKeys+=(key);
String lastOne = temp.substring(temp.length() - 1);
Serial.println("Last One characters is: " + lastOne);
if (lastOne == "D")
{
if(passwordString == temp.substring(0,4) && lockStatus == false)
{
Serial.println("Safe opened Successfully");
keyIndex= 0;
pressedKeys = "";
lockStatus = true;
digitalWrite(relay1, HIGH);
digitalWrite(redLed, HIGH);
digitalWrite(greenLed, LOW);
}
else if(passwordString == temp.substring(0,4) && lockStatus == true){
Serial.println("Safe closed Successfully");
keyIndex= 0;
pressedKeys = "";
lockStatus = false;
digitalWrite(relay1, LOW);
digitalWrite(redLed, LOW);
digitalWrite(greenLed, HIGH);
}
}
return;
}
else{
keyIndex++;
pressedKeys +=(key);
//Serial.print("keyIndex:");
//Serial.println(keyIndex);
Serial.print("pressedKeys:");
Serial.println(pressedKeys);
}
}
}
void Error_OTP()
{
Serial.println("OTP Error. !!! Warning");
}