Arduino 报警触发后如何接受用户输入

Arduino 报警触发后如何接受用户输入,arduino,lcd,keypad,Arduino,Lcd,Keypad,因此,现在当我启动系统并将我的手放在PIR传感器前面时,它说系统触发了,我如何让它从用户那里获取密码以停用系统。此外,当系统处于非活动状态时,应在屏幕上显示“未激活” #包括 #包括 #包括 //密码 密码=密码(“1234”); 液晶显示器(0,1,10,11,12,13); 常量字节行=4; 常量字节COLS=4; char keys[ROWS][COLS]={//定义键映射 { ‘1’、‘2’、‘3’、‘A’} , { ‘4’、‘5’、‘6’、‘B’} , { ‘7’、‘8’、‘9’、‘C

因此,现在当我启动系统并将我的手放在PIR传感器前面时,它说系统触发了,我如何让它从用户那里获取密码以停用系统。此外,当系统处于非活动状态时,应在屏幕上显示“未激活”

#包括
#包括
#包括
//密码
密码=密码(“1234”);
液晶显示器(0,1,10,11,12,13);
常量字节行=4;
常量字节COLS=4;
char keys[ROWS][COLS]={//定义键映射
{
‘1’、‘2’、‘3’、‘A’}
,
{
‘4’、‘5’、‘6’、‘B’}
,
{
‘7’、‘8’、‘9’、‘C’}
,
{
“*”、“0”、“#”、“D”}
};
字节rowPins[行]={9,8,7,6};
字节colPins[COLS]={5,4,3,2};
小键盘=小键盘(makeyMap(键)、行PIN、列PIN、行、列);
int-armed=0;
常数int pir1=A4;
int-sensorHit=0;
int alarmStatus=0;
int alarmActive=0;
int区=0;
无效设置(){
//将安装代码放在此处,以便运行一次:
lcd.begin(16,2);
pinMode(pir1,输入);
主屏幕();
键盘。addEventListener(键盘事件);
}
void循环(){
//将主代码放在此处,以便重复运行:
keypad.getKey();
如果(alarmActive==1){
如果(数字读取(pir1)=高){
区域=0;
报警触发();
}
}
}
无效键盘事件(键盘事件eKey){
开关(keypad.getState()){
案件已审结:
lcd.print(eKey);
开关(eKey){
大小写“#”:checkPassword();break;
违约:
密码追加(eKey);
}
}
}
无效报警触发(){
密码重置();
alarmStatus=1;
lcd.clear();
lcd.setCursor(0,0);
lcd.打印(“系统触发”);
液晶显示打印(0,1);
如果(区域==0){
lcd.打印(“前门打开”);
}
}
void checkPassword(){
if(password.evaluate()){//如果代码正确:
lcd.clear();//清除lcd
lcd.print(“有效密码”);//打印消息
password.reset();//在正确输入后重置密码
延迟(1500);//等待。。。
lcd.clear();//清除
如果(alarmStatus==0&&alarmActive==0){//如果系统关闭(即:解除防护)
lcd.print(“武装!”);//显示消息
alarmActive=1;//系统已启用
alarmStatus=1;
延迟(2000);//等待
lcd.clear();//清除
setCursor(0,0);//返回到lcd的左上角
lcd.print(“解除武装的代码:”;//回到我们开始的地方
}
否则{
lcd.print(“解除防护!”);//显示消息
alarmActive=0;//系统未配备武器
alarmStatus=0;
延迟(2000);//等待
lcd.clear();//清除
setCursor(0,0);//返回到lcd的左上角
lcd.print(“代码到手臂:”;//回到我们开始的地方
}
}
else{//如果密码不正确:
lcd.clear();
lcd.打印(“无效密码”);
password.reset();//输入错误后重置密码
延迟(2000年);
lcd.clear();
lcd.setCursor(0,0);
打印(“重试代码:”);
}
}
void主屏幕(){
lcd.clear();
lcd.setCursor(0,0);
打印(“输入Pin:”);
}

您需要一个输入设备来输入密码。一个简单的例子是10个开关,其中每个开关代表1,因此密码必须介于0到10之间。将开关值添加到一起,并与设置的密码进行比较。剩下的对你来说应该很容易。

到底是什么问题?你的代码怎么不起作用?我们不是代码编写服务。还有,为什么这是你的第三个帐户对这个项目提出问题?哦,我没看到。是的,在他的密码里。嗯,如果代码不是他写的,他应该试着写下它。
#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:");
}