#include <Keypad.h>
#include<EEPROM.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
char password[4];
char initial_password[4],new_password[4];
int i=0;
int relay_pin = 11;
int relay_state;
char key_pressed=0;
const byte rows = 4;
const byte columns = 4;
char hexaKeys[rows][columns] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte row_pins[rows]={7, 8, 9, 10};
byte column_pins[columns]={3, 4, 5, 6};
Keypad keypad_key=Keypad( makeKeymap(hexaKeys),row_pins,column_pins,rows,columns);
void setup(){
lcd.init();
lcd.backlight();
relay_state=1;
pinMode(relay_pin, OUTPUT);
digitalWrite(relay_pin, relay_state);
lcd.setCursor(5,0);
lcd.print("B & F");
lcd.setCursor(2,1);
lcd.print("ELECTRONICS");
delay(1000);
lcd.clear();
lcd.setCursor(4,0);
lcd.print("WELCOME");
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ELECTRIC VEHICLE");
lcd.setCursor(0,1);
lcd.print("CHARGING STATION");
delay(1000);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("PLEASE CONNECT");
lcd.setCursor(1,1);
lcd.print("CHARGING CABLE");
delay(1000);
lcd.clear();
lcd.setCursor(4,0);
lcd.print("TO YOUR");
lcd.setCursor(0,1);
lcd.print("ELECTRIC VEHICLE");
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("AFTER CONNECTION");
lcd.setCursor(0,1);
lcd.print("ENTER YOUR PIN");
delay(1000);
lcd.clear();
lcd.print(" Enter Password");
lcd.setCursor(6,1);
initialpassword();
}
void loop(){
key_pressed = keypad_key.getKey();
if(key_pressed=='#')
change();
if (key_pressed)
{
password[i++]=key_pressed;
lcd.print('*');
}
if(i==4){
delay(200);
for(int j=0;j<4;j++) {
initial_password[j]=EEPROM.read(j);
}
if(!(strncmp(password, initial_password,4))){ // ŞIFRE DOGRU DURUMLARI
if(relay_state == 1){ // Röle çalışmaz haldeyken -- şifre doğru durumları --
relay_state = 0; // Röleyi çalıştır
digitalWrite(relay_pin, relay_state); // Röle çalışır durumda
lcd.clear();
lcd.setCursor(2,0);
lcd.print("PASSWORD IS");
lcd.setCursor(4,1);
lcd.print("CORRECT");
delay(3000);
lcd.setCursor(0,0);
lcd.print("to set new pin");
lcd.setCursor(0,1);
lcd.print("Press >#< button");
delay(2000);
lcd.clear();
lcd.print(" Enter Password");
lcd.setCursor(6,1);
i=0;
}
else { // Röle çalışır haldeyken -- şifre doğru durumları --
lcd.clear();
relay_state = 1; // Röleyi çalıştırma
digitalWrite(relay_pin, relay_state); // Röle çalışmaz durumda
lcd.setCursor(2,0);
lcd.print("PASSWORD IS");
lcd.setCursor(4,1);
lcd.print("CORRECT");
delay(3000);
lcd.setCursor(0,0);
lcd.print("Press >#< button");
lcd.setCursor(0,1);
lcd.print("to set new pin");
delay(2000);
lcd.clear();
lcd.print(" Enter Password");
lcd.setCursor(6,1);
i=0;
}
}
else if(strncmp(password, initial_password,4)) { // ŞIFRE YANLIŞ DURUMLARI
if(relay_state == 1) { // Röle çalışmaz haldeyken -- şifre yanlış durumları --
lcd.clear();
relay_state = 1; // Röleyi çalıştırma
digitalWrite(relay_pin, relay_state); // Röle çalışmaz durumda
lcd.setCursor(1,0);
lcd.print("Wrong Password");
lcd.setCursor(3,1);
lcd.print("Try Again");
delay(2000);
lcd.setCursor(0,0);
lcd.print("Press >#< button");
lcd.setCursor(0,1);
lcd.print("to set new pin");
delay(2000);
lcd.clear();
lcd.print(" Enter Password");
lcd.setCursor(6,1);
i=0;
}
else { // Röle çalışır haldeyken -- şifre yanlış durumları --
relay_state=0; // Röleyi çalıştır
digitalWrite(relay_pin, relay_state); // Röle çalışır halde kalsın
lcd.setCursor(1,0);
lcd.print("Wrong Password");
lcd.setCursor(3,1);
lcd.print("Try Again");
delay(2000);
lcd.clear();
lcd.print(" Enter Password");
lcd.setCursor(6,1);
i=0;
}
} // şifre yanlış durumları kapanış
} // if=4 döngüsü kapanış
} // voidloop kapanış
void change(){
int j=0;
lcd.clear();
lcd.print("Current Password");
lcd.setCursor(6,1);
while(j<4){
char key=keypad_key.getKey();
if(key)
{
new_password[j++]=key;
lcd.print(key);
}
key=0;}
delay(500);
if((strncmp(new_password, initial_password, 4))){
lcd.clear();
lcd.print(" Wrong Password");
lcd.setCursor(3,1);
lcd.print("Try Again");
delay(1000);}
else{
j=0;
lcd.clear();
lcd.setCursor(2,0);
lcd.print("New Password");
lcd.setCursor(6,1);
while(j<4){
char key=keypad_key.getKey();
if(key)
{
initial_password[j]=key;
lcd.print(key);
EEPROM.write(j,key);
j++;}}
lcd.clear();
lcd.print("PIN is Changed");
delay(2000);}
lcd.clear();
lcd.print(" Enter Password");
lcd.setCursor(6,1);
key_pressed=0;
}
void initialpassword(){
int j;
for(j=0;j<4;j++)
EEPROM.write(j,j+49);
for(j=0;j<4;j++)
initial_password[j]=EEPROM.read(j);}