布防/撤防家庭安全系统 arduino 键盘 lcd

Posted

技术标签:

【中文标题】布防/撤防家庭安全系统 arduino 键盘 lcd【英文标题】:arm/disarm home security system arduino keypad lcd 【发布时间】:2016-12-07 03:06:38 【问题描述】:

所以我在尝试解除系统武装时遇到了问题。当我将代码上传到 arduino 时,它会要求我输入一个密码,然后它会立即激活系统。但是当我尝试停用系统时,它会使用 pin 并清除屏幕并执行我设置的 mainScreen 功能。

代码如下:

#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();
  

【问题讨论】:

无需密码,只需按 D 即可停用... 如何让它接受密码 【参考方案1】:

如Arduino keypad 4x4 to LCD activate/deactivate 中所述,您必须保持当前状态,并且必须CLEAR passwordcurrenPasswordLength。请参阅答案中的 WORKING 示例。

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

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

【讨论】:

以上是关于布防/撤防家庭安全系统 arduino 键盘 lcd的主要内容,如果未能解决你的问题,请参考以下文章

详解如何基于Arduino兼容板Teensy LC实现虚拟键盘与鼠标

详解如何基于Arduino兼容板Teensy LC实现虚拟键盘与鼠标

团队博客--10

GB28181设备控制和TeleBoot远程启动命令探究

Arduino与Proteus仿真实例-74C922键盘解码驱动仿真

使用适用于 Arduino 的 Arduino / XMPP 客户端进行家庭自动化