#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27,16,2);
const int vibSensor1Pin = 13;
int vibSensor1Value = 0;
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int control = 1;
char key;
String pass = "";
String password = "0000";
String disPass = "";
String systemState = "DISARMED";
int menu = 1;
int hooterTime = 30;
void setup() {
pinMode(vibSensor1Pin , INPUT);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Starting Up... ");
lcd.setCursor(0,1);
lcd.print(" Please wait! ");
String EEPROMpass = "";
String EEPROMpass0 = "";
String EEPROMpass1 = "";
String EEPROMpass2 = "";
String EEPROMpass3 = "";
EEPROMpass0 = EEPROM.read(0);
EEPROMpass1 = EEPROM.read(1);
EEPROMpass2 = EEPROM.read(2);
EEPROMpass3 = EEPROM.read(3);
EEPROMpass = EEPROMpass0 + EEPROMpass1 + EEPROMpass2 + EEPROMpass3;
Serial.println(EEPROMpass);
if(EEPROMpass0.toInt()>= 0 && EEPROMpass0.toInt()<=9 && EEPROMpass1.toInt()>=0 && EEPROMpass1.toInt()<=9 && EEPROMpass2.toInt()>=0 && EEPROMpass2.toInt()<=9 && EEPROMpass3.toInt()>=0 && EEPROMpass3.toInt()<=9) {
Serial.println("Password Found in EEPROM");
password = EEPROMpass;
Serial.println(password);
}
else {
Serial.println("Saving password in EEPROM...");
String password0 = String(password[0]);
String password1 = String(password[1]);
String password2 = String(password[2]);
String password3 = String(password[3]);
int passwordInt0 = password0.toInt();
int passwordInt1 = password1.toInt();
int passwordInt2 = password2.toInt();
int passwordInt3 = password3.toInt();
EEPROM.write(0, passwordInt0);
EEPROM.write(1, passwordInt1);
EEPROM.write(2, passwordInt2);
EEPROM.write(3, passwordInt3);
EEPROMpass0 = EEPROM.read(0);
EEPROMpass1 = EEPROM.read(1);
EEPROMpass2 = EEPROM.read(2);
EEPROMpass3 = EEPROM.read(3);
EEPROMpass = EEPROMpass0 + EEPROMpass1 + EEPROMpass2 + EEPROMpass3;
Serial.println("Password Saved");
Serial.println(EEPROMpass);
delay(1000);
}
String EEPROMHooter = "";
EEPROMHooter = EEPROM.read(10);
if(EEPROMHooter.toInt() >= 0 && EEPROMHooter.toInt() <= 99) {
hooterTime = EEPROMHooter.toInt();
Serial.println("Hooter Time found in EEPROM");
Serial.println(EEPROMHooter);
delay(1000);
}
else {
EEPROM.write(10, hooterTime);
Serial.println("Hooter Time saved in EEPROM");
EEPROMHooter = EEPROM.read(10);
Serial.println(EEPROMHooter);
delay(1000);
}
lcd.clear();
}
void loop() {
lcd.setCursor(0,0);
vibSensor1Value = digitalRead( vibSensor1Pin);
Serial.println(vibSensor1Value);
if( vibSensor1Value == 1 && systemState == "DISARMED") {
lcd.setCursor(0,0);
lcd.print("Problem in zone ");
lcd.setCursor(0,1);
lcd.print("1 ");
delay(50);
}
else {
lcd.setCursor(0,0);
lcd.print("Security System ");
lcd.setCursor(0,1);
lcd.print(" Welcomes You ");
}
key = keypad.getKey();
if (key){
Serial.println(key);
if (key == '*') {
lcd.setCursor(1,0);
lcd.clear();
lcd.print("Enter Password");
control = 1;
while(control) {
key = keypad.getKey();
if (key) {
if (key == '#') {
int result = checkPassword();
if (result == 1) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Password Matched");
lcd.setCursor(0,1);
lcd.print(" Opening Menu.. ");
delay(1500);
lcd.clear();
menu1();
while(true) {
key = keypad.getKey();
if (key) {
if(key == 'A'){
lcd.clear();
menu--;
}
if(key == 'B'){
lcd.clear();
menu++;
}
if(key == 'C') {
pass = "";
disPass = "";
control = 0;
lcd.clear();
break;
}
if(menu>4){
menu = 1;
}
if(menu<1){
menu = 4;
}
}
if(menu == 1){
menu1();
}
if(menu == 2){
menu2();
}
if(menu == 2 && key == '#'){
openMenu2();
}
if(menu == 3){
menu3();
}
if(menu==4){
menu4();
}
if(menu == 4 && key == '#') {
openMenu4();
}
}
}
else {
lcd.clear();
lcd.setCursor(6,0);
lcd.print("TRY");
lcd.setCursor(5,1);
lcd.print("AGAIN");
pass = "";
disPass = "";
delay(2000);
lcd.setCursor(1,0);
lcd.clear();
lcd.print("Enter Password");
}
}
if(key=='1' || key=='2' || key=='3' || key=='4' || key=='5' || key=='6' || key=='7' || key=='8' || key=='9' || key=='0') {
disPass += "*";
pass += key;
lcd.setCursor(0,1);
lcd.print(disPass);
}
if (key == 'C') {
pass = "";
disPass = "";
control = 0;
menu = 1;
lcd.clear();
}
}
}
}
}
}
int checkPassword() {
if (pass == password) {
return 1;
}
else
return 0;
}
void menu1(){
lcd.setCursor(0,0);
lcd.print("> ZONE SETTING ");
lcd.setCursor(0,1);
lcd.print(" HOOTER TIME ");
}
void menu2(){
lcd.setCursor(0,0);
lcd.print(" ZONE SETTING ");
lcd.setCursor(0,1);
lcd.print("> HOOTER TIME ");
}
void menu3(){
lcd.setCursor(0,0);
lcd.print("> DATE TIME SET ");
lcd.setCursor(0,1);
lcd.print(" PASS CHANGE ");
}
void menu4(){
lcd.setCursor(0,0);
lcd.print(" DATE TIME SET ");
lcd.setCursor(0,1);
lcd.print("> PASS CHANGE ");
}
void openMenu2(){
lcd.clear();
while(true){
lcd.setCursor(0,0);
lcd.print("Hooter Time:");
lcd.setCursor(13,0);
lcd.print(hooterTime);
lcd.setCursor(15,0);
lcd.print("s");
key = keypad.getKey();
if(key == 'A'){
lcd.clear();
hooterTime++;
}
if(key == 'B'){
lcd.clear();
hooterTime--;
}
if(hooterTime <= 0){
hooterTime = 0;
}
if(hooterTime >= 99){
hooterTime = 99;
}
if(key == '#') {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hooter time set");
lcd.setCursor(0, 1);
String printValue = "to: " + String(hooterTime) + "s";
lcd.print(printValue);
EEPROM.write(10, hooterTime);
Serial.println("Hooter Time saved in EEPROM");
delay(2000);
break;
}
}
}
void openMenu4() {
lcd.clear();
int result = 2;
disPass = "";
pass = "";
while(true) {
lcd.setCursor(0,0);
lcd.print("Enter old pass: ");
lcd.setCursor(0,1);
key = keypad.getKey();
if(key) {
if(key=='1' || key=='2' || key=='3' || key=='4' || key=='5' || key=='6' || key=='7' || key=='8' || key=='9' || key=='0') {
disPass += "*";
pass += key;
lcd.setCursor(0,1);
lcd.print(disPass);
}
if(key == '#') {
result = checkPassword();
if(result == 1) {
changePassword();
break;
}
else {
pass = "";
disPass = "";
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Try Again! ");
delay(1500);
lcd.clear();
}
}
}
}
}
void changePassword() {
password = "";
disPass = "";
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Password ");
lcd.setCursor(0,1);
lcd.print(" Matched! ");
delay(1000);
lcd.clear();
while(true) {
lcd.setCursor(0,0);
lcd.print("Enter new pass: ");
key = keypad.getKey();
if (password.length() <= 3) {
if(key=='1' || key=='2' || key=='3' || key=='4' || key=='5' || key=='6' || key=='7' || key=='8' || key=='9' || key=='0') {
disPass += "*";
password += key;
lcd.setCursor(0,1);
lcd.print(disPass);
}
}
if (key == '#') {
if (password.length() == 4) {
lcd.setCursor(0,0);
lcd.print(" Password ");
lcd.setCursor(0,1);
lcd.print(" Accepted.. ");
delay(1500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ur new password:");
lcd.setCursor(0,1);
lcd.print("is:");
lcd.setCursor(4,1);
lcd.print(password);
Serial.println("Saving password in EEPROM...");
String EEPROMpass = "";
String EEPROMpass0 = "";
String EEPROMpass1 = "";
String EEPROMpass2 = "";
String EEPROMpass3 = "";
String password0 = String(password[0]);
String password1 = String(password[1]);
String password2 = String(password[2]);
String password3 = String(password[3]);
int passwordInt0 = password0.toInt();
int passwordInt1 = password1.toInt();
int passwordInt2 = password2.toInt();
int passwordInt3 = password3.toInt();
EEPROM.write(0, passwordInt0);
EEPROM.write(1, passwordInt1);
EEPROM.write(2, passwordInt2);
EEPROM.write(3, passwordInt3);
EEPROMpass0 = EEPROM.read(0);
EEPROMpass1 = EEPROM.read(1);
EEPROMpass2 = EEPROM.read(2);
EEPROMpass3 = EEPROM.read(3);
EEPROMpass = EEPROMpass0 + EEPROMpass1 + EEPROMpass2 + EEPROMpass3;
Serial.println("Password Saved");
Serial.println(EEPROMpass);
delay(1500);
break;
}
else {
lcd.setCursor(0,0);
lcd.print("Need 4 num pass ");
delay(1500);
}
}
}
}