How to accept input from user after alarm is triggered

123 views Asked by At

So as of right now when I arm the system and move my hand in front of the PIR sensor it says system triggered how do i get it to take a password from the user to deactivate the system. Also when the system is deactive it should say on the screen "Not Active"

#include <LiquidCrystal.h>
#include <Password.h>
#include <Keypad.h>
//Password
Password password = Password("1234");
LiquidCrystal lcd(0, 1, 10, 11, 12, 13);

const byte ROWS = 4;
const byte COLS = 4;

char keys[ROWS][COLS] =  { // Define the Keymap
  {
    '1','2','3','A'      }
  ,
  {
    '4','5','6','B'      }
  ,
  {
    '7','8','9','C'      }
  ,
  {
    '*','0','#','D'      }
};

byte rowPins[ROWS] = {9,8,7,6};
byte colPins[COLS] = {5,4,3,2};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);
int armed = 0;
const int pir1 = A4;
int sensorHit = 0;
int alarmStatus = 0;
int alarmActive = 0;
int zone = 0;

void setup() {
  // put your setup code here, to run once:
  lcd.begin(16,2);
  pinMode(pir1, INPUT);
  mainScreen();
  keypad.addEventListener(keypadEvent);
}

void loop() {
  // put your main code here, to run repeatedly:
  keypad.getKey();
  if(alarmActive == 1){
    if(digitalRead(pir1) == HIGH){
      zone = 0;
      alarmTriggered();
    }
  }
}
void keypadEvent(KeypadEvent eKey){
  switch (keypad.getState()){
    case PRESSED:
    lcd.print(eKey);
  switch (eKey){
    case '#': checkPassword(); break;
    default:
    password.append(eKey);
  }
  }
}
void alarmTriggered(){
  password.reset();
  alarmStatus = 1;
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("SYSTEM TRIGGERED");
  lcd.print(0,1);
  if(zone == 0){
    lcd.print("  FRONT DOOR OPEN  ");
  }
}
void checkPassword(){
  if (password.evaluate()){       //if code is correct:
    lcd.clear();                  //clear LCD
    lcd.print("VALID PASSWORD");  //print message
    password.reset();             //resets password after correct entry
    delay(1500);                  //wait...
    lcd.clear();                  //clear
    if (alarmStatus==0 && alarmActive == 0){                //if system is off (ie: disarmed)
      lcd.print("ARMED!");         //display message
      alarmActive=1;                      //system armed
      alarmStatus=1;
      delay(2000);                  //wait
      lcd.clear();                  //clear
      lcd.setCursor(0, 0);          //return to top left of LCD
      lcd.print("Code to disarm:"); //back to where we began
    }
    else{
      lcd.print("DISARMED!");         //display message
      alarmActive=0;                      //system unarmed
      alarmStatus=0;
      delay(2000);                  //wait
      lcd.clear();                  //clear
      lcd.setCursor(0, 0);          //return to top left of LCD
      lcd.print("Code to arm:");     //back to where we began
    }
  }
  else{                            //if password is incorrect:
    lcd.clear();
    lcd.print("INVALID PASSWORD");
    password.reset();             //resets password after INCORRECT entry
    delay(2000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Retry Code:");
  }
}
void mainScreen(){
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Enter Pin:");
}
1

There are 1 answers

1
Timothy O On

You need an input device for entering the password. A simple example can be 10 switches where each switch represent 1 so our password has to be between 0 to 10. You add the switches values together and compare with your set password. The rest should be easy for you.