#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
int level = 0;
int my_1st_digit = 0;
int my_2nd_digit = 0;
int my_3rd_digit = 0;
int my_4th_digit = 0;
int pw_1st_digit = 1;
int pw_2nd_digit = 2;
int pw_3rd_digit = 3;
int pw_4th_digit = 4;
void clear_screen() {
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" ");
}
void home_screen() {
clear_screen();
lcd.setCursor(8, 0);
lcd.print("Home");
lcd.setCursor(3, 2);
lcd.print("Tem Controller");
}
void my_1st_digit_screen() {
clear_screen();
lcd.setCursor(3, 0);
lcd.print("Enter Password");
lcd.setCursor(8, 2);
lcd.print(my_1st_digit);
lcd.setCursor(9, 2);
lcd.print("***");
}
void my_2nd_digit_screen() {
clear_screen();
lcd.setCursor(3, 0);
lcd.print("Enter Password");
lcd.setCursor(8, 2);
lcd.print("*");
lcd.setCursor(9, 2);
lcd.print(my_2nd_digit);
lcd.setCursor(10, 2);
lcd.print("**");
}
void for_button() {
if (!digitalRead(3) == true) {
if (level == 0) {
level = 10;
} else if (level == 10) {
my_1st_digit++ ;
} else if (level == 11) {
my_2nd_digit++ ;
} else if (level == 12) {
my_3rd_digit++ ;
} else if (level == 13) {
my_4th_digit++ ;
}
update_menu();
delay(100);
while (!digitalRead(3) == true){
}
}
if (!digitalRead(4) == true) {
if (level == 10) {
my_1st_digit-- ;
} else if (level == 11) {
my_2nd_digit-- ;
} else if (level == 12) {
my_3rd_digit-- ;
} else if (level == 13) {
my_4th_digit-- ;
}
update_menu();
delay(100);
while (!digitalRead(4) == true){
}
}
if (!digitalRead(6) == true) {
if ((level == 10 | level == 11) | (level == 12 | level == 13)) {
reset_digit();
level = 0;
} else if (level == 1) {
level = 0;
}
update_menu();
delay(100);
while (!digitalRead(6) == true){
}
}
if (!digitalRead(5) == true) {
execute_action();
update_menu();
delay(100);
while (!digitalRead(5) == true){
}
}
}
void update_menu() {
if (level == 0) {
home_screen();
} else if (level == 1) {
Final_Screen();
} else if (level == 10) {
if (my_1st_digit < 0) {
my_1st_digit = 9;
}
if (my_1st_digit > 9) {
my_1st_digit = 0;
}
my_1st_digit_screen();
} else if (level == 11) {
if (my_2nd_digit < 0) {
my_2nd_digit = 9;
}
if (my_2nd_digit > 9) {
my_2nd_digit = 0;
}
my_2nd_digit_screen();
} else if (level == 12) {
if (my_3rd_digit < 0) {
my_3rd_digit = 9;
}
if (my_3rd_digit > 9) {
my_3rd_digit = 0;
}
my_3rd_digit_screen();
} else if (level == 13) {
if (my_4th_digit < 0) {
my_4th_digit = 9;
}
if (my_4th_digit > 9) {
my_4th_digit = 0;
}
my_4th_digit_screen();
}
}
void execute_action() {
if (level == 10) {
level = 11;
} else if (level == 11) {
level = 12;
} else if (level == 12) {
level = 13;
} else if (level == 13) {
if ((pw_1st_digit == my_1st_digit & pw_2nd_digit == my_2nd_digit) & (pw_3rd_digit == my_3rd_digit & pw_4th_digit == my_4th_digit)) {
login_success_screen();
delay(1*1000);
reset_digit();
level = 1;
} else {
login_fail_screen();
delay(1*1000);
reset_digit();
level = 0;
}
}
}
void my_3rd_digit_screen() {
clear_screen();
lcd.setCursor(3, 0);
lcd.print("Enter Password");
lcd.setCursor(8, 2);
lcd.print("**");
lcd.setCursor(10, 2);
lcd.print(my_3rd_digit);
lcd.setCursor(11, 2);
lcd.print("*");
}
void my_4th_digit_screen() {
clear_screen();
lcd.setCursor(3, 0);
lcd.print("Enter Password");
lcd.setCursor(8, 2);
lcd.print("***");
lcd.setCursor(11, 2);
lcd.print(my_4th_digit);
}
void reset_digit() {
my_1st_digit = 0;
my_2nd_digit = 0;
my_3rd_digit = 0;
my_4th_digit = 0;
}
void Final_Screen() {
clear_screen();
lcd.setCursor(7, 2);
lcd.print("WELCOME");
}
void login_success_screen() {
clear_screen();
lcd.setCursor(7, 2);
lcd.print("Success");
}
void login_fail_screen() {
clear_screen();
lcd.setCursor(1, 2);
lcd.print("Incorrect Password");
}
void setup() {
lcd.init();
lcd.backlight();
home_screen();
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
}
void loop() {
for_button();
}