Arduino 报警触发后如何接受用户输入
因此,现在当我启动系统并将我的手放在PIR传感器前面时,它说系统触发了,我如何让它从用户那里获取密码以停用系统。此外,当系统处于非活动状态时,应在屏幕上显示“未激活”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
#包括
#包括
#包括
//密码
密码=密码(“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:");
}