首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防护/解除防护家庭安全系统arduino键盘lcd

防护/解除防护家庭安全系统arduino键盘lcd
EN

Stack Overflow用户
提问于 2016-12-07 11:06:38
回答 1查看 464关注 0票数 0

所以当我试图解除系统的武装时,我遇到了一个问题。当我将代码上传到arduino时,它会要求我输入个人识别码,然后它会立即激活系统。但是,当我尝试停用系统时,它会取出引脚,清除屏幕并执行我设置的mainScreen函数。

代码如下:

代码语言:javascript
复制
#include "Keypad.h"
#include "LiquidCrystal.h"
#include "Password.h"
LiquidCrystal lcd(0,1,10,11,12,13);
char newPasswordString; //hold the new password
char newPassword[4]; //charater string of newPasswordString

//initialize password to 1234
//you can use password.set(newPassword) to overwrite it
Password password = Password("1234");

byte maxPasswordLength = 4; 
byte currentPasswordLength = 4;
// keypad type definition
const byte ROWS = 4; //four rows
const byte COLS = 4; //three 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}; //Rows 0 to 3
byte colPins[COLS]= {5,4,3,2}; //Columns 0 to 3
int count=0;     
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup()
{    
  lcd.begin(16, 2);
  mainScreen();
}
void loop(){
   char key = keypad.getKey();
   if (key != NO_KEY){
      delay(60); 
      switch (key){
      case 'A': activate(); break; 
      case 'B': break; 
      case 'C': break; 
      case 'D': deactivate(); break; 
      case '#':  break;
      case '*': break;
      default: processNumberKey(key);
      }
   }
}
void processNumberKey(char key) {
   lcd.print(key);
   currentPasswordLength++;
   password.append(key);
   if(password.evaluate()){
    activate();
   }
}    
void activate() {
   if (password.evaluate()){
      lcd.clear();
      lcd.print("Activated.");
      delay(1000);
      mainScreen();
   } else {
      lcd.clear();
      lcd.print("Wrong Password!");
            mainScreen();    
   } 
}
void deactivate(){
    if (password.evaluate()){
      lcd.clear();
      lcd.print("Deactivated.");
      delay(1000);
   } else {
      lcd.clear();
      lcd.print("Wrong Password!");
      mainScreen();
   } 
}
void mainScreen(){
  lcd.clear();
  lcd.print("Enter Pin:");
  keypad.getKey();
  }
EN

回答 1

Stack Overflow用户

发布于 2016-12-07 17:12:35

正如在Arduino keypad 4x4 to LCD activate/deactivate中所指出的,您必须保持当前状态,并且必须清除 passwordcurrenPasswordLength。请参阅答案中的工作示例。

设置byte currenPasswordLength = 4不会有任何帮助。如果按下第一个键,它将增加到5,下一个键增加到6,依此类推。

在256次按键后,您将再次得到4!由于你没有清除之前检查过的密码,你会得到“错误密码”的结果(最终堆栈溢出)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41008751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档