#include <EEPROM.h>
#include <Wire.h>
#include <Servo.h>
#include <U8g2lib.h>
#define TONE 10
#define SERVO 9
#ifndef _KEY_H_
#define _KEY_H_
#include <Keypad.h>
const uint8_t ROWS = 2;
const uint8_t COLS = 1;
char keys[ROWS][COLS] = {
{'B'},
{'A'},
};
uint8_t colPins[COLS] = {6};
uint8_t rowPins[ROWS] = {2,3};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
#endif
int position_x=0;
int pos=0;
int sumput=0;
int Inputedpassword[6] ;
byte pass=0;
byte password[6];
int address,a=1;
Servo myservo;
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
void setup()
{
Serial.begin(9600);
Wire.begin();
EEPROM.get(6,pass);
myservo.attach(SERVO);
u8g2.begin();
if(pass!=1)
{
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(0,10);
u8g2.print(F(" Set your password"));
u8g2.sendBuffer();
delay(2000);
}
else
{
for(address=0;address<6;address++)
{
EEPROM.get(address,password[address]);
}
}
}
void loop()
{
char key = keypad.getKey();
if(pass!=1)
{
Setpassword();
}
else if(a)
{
Inputpassword();
}
}
void Setpassword()
{
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(0,10);
u8g2.print(F(" password:"));
u8g2.sendBuffer();
address=0;
while(1)
{
char key = keypad.getKey();
if(address<6)
{
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(position_x,30);
u8g2.print(sumput);
u8g2.sendBuffer();
if(key=='A')
{
sumput++;
if(sumput>=10)
{
sumput=0;
}
}
else if(key=='B')
{
password[address]=sumput;
sumput=0;
address++;
position_x+=8;
if(address==6)
{
for(address=0;address<6;address++)
{
EEPROM.put(address,0);
EEPROM.put(address,password[address]);
}
if(pass!=1)
{
EEPROM.put(6,1);
EEPROM.get(6,pass);
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(0,10);
u8g2.print(F("Set successfully"));
u8g2.sendBuffer();
delay(1000);
}
return;
}
}
}
}
}
void Inputpassword()
{
position_x=0;
int i=0;
a=0;
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(0,10);
u8g2.print(F("ENTER PASSWORD:"));
u8g2.sendBuffer();
while(1)
{
char key = keypad.getKey();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(position_x,30);
u8g2.print(sumput);
u8g2.sendBuffer();
if(i<6)
{
if(key=='A')
{
sumput++;
if(sumput>=10)
{
sumput=0;
}
}
else if(key=='B')
{
Inputedpassword[i]=sumput;
sumput=0;
position_x+=8;
i++;
}
if(i==6 && key=='B')
{
for(i=0;i<6;i++)
{
if(Inputedpassword[i]!=password[i]) a=1;
}
if(a)
{
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(0,10);
u8g2.print(F("Password Error"));
u8g2.sendBuffer();
tone(TONE,250);
if(pos>0)
{
if(pos!=90)
{
for (pos = 90; pos >= 90 ; pos --)
{
myservo.write(pos);
delay(5);
}
}
}
delay(1500);
noTone(TONE);
return;
}
else
{
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(0,10);
u8g2.print(F("Password Correct"));
u8g2.sendBuffer();
for (pos = 0; pos <= 180; pos ++)
{
myservo.write(pos);
delay(5);
}
delay(1500);
a=1;
return;
}
}
}
}
}