#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#define ROW_NUM 4 // four rows
#define COLUMN_NUM 4 // four columns
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27 (from DIYables LCD), 16 column and 2 rows
char keys[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte pin_rows[ROW_NUM] = {23,25,27,29}; // GPIO19, GPIO18, GPIO5, GPIO17 connect to the row pins
byte pin_column[COLUMN_NUM] = {31,33,35,37}; // GPIO16, GPIO4, GPIO0, GPIO2 connect to the column pins
String input_password;
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
int cursorColumn = 3;
int button1=39;
int button2=41;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
lcd.init(); // initialize the lcd
lcd.backlight();
// lcd.setCursor(1,0);
// lcd.print("Hello");
Serial.println("Hello, ESP32!");
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
pinMode(52, OUTPUT);
input_password.reserve(32); // maximum input characters is 33, change if needed
digitalWrite(52, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
int buttonVal1 = digitalRead(button1);
int buttonVal2 = digitalRead(button2);
char key = keypad.getKey();
lcd.setCursor(2, 0);
lcd.print("Enter Passcode");
if (key) {
lcd.setCursor(cursorColumn, 1); // move cursor to (cursorColumn, 0)
// lcd.blink();k
lcd.print("*"); // print key at (cursorColumn, 0)
Serial.print(key);
if (cursorColumn == 16) { // if reaching limit, clear LCD
lcd.clear();
cursorColumn = 0;
}
input_password += key;
cursorColumn++;
}
if(cursorColumn>=8){
if(input_password=="CDAB"){
Serial.println("\nPin Matched");
input_password="";
lcd.clear();
lcd.setCursor(3,1);
lcd.setCursor(4,3);
lcd.println("Pin Matched");
cursorColumn = 4;
digitalWrite(52, HIGH);
}
else {
Serial.println("\nPin Doesn't match");
input_password="";
lcd.clear();
// lcd.setCursor(3,1);
cursorColumn = 3;
lcd.setCursor(1,3);
lcd.println("Pin Does not Match");
digitalWrite(52, LOW);
}
}
if(buttonVal1==0){
input_password="";
Serial.println("Password Cleared");
lcd.clear();
lcd.setCursor(0,1);
cursorColumn = 4;
digitalWrite(52, LOW);
}
if(buttonVal2==0){
if(input_password!=""){
if(input_password=="CDAB"){
Serial.println("\nPin Matched");
input_password="";
lcd.clear();
lcd.setCursor(3,1);
lcd.setCursor(4,3);
lcd.println("Pin Matched");
cursorColumn = 4;
digitalWrite(52, HIGH);
} else {
Serial.println("\nPin Doesn't match");
input_password="";
lcd.clear();
// lcd.setCursor(3,1);
cursorColumn = 3;
lcd.setCursor(1,3);
lcd.println("Pin Does not Match");
digitalWrite(52, LOW);
}
}
Serial.print(input_password);
}
// Serial.println(sensorVal);
delay(10); // this speeds up the simulation
}