布防/撤防家庭安全系统 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 password
和currenPasswordLength
。请参阅答案中的 WORKING 示例。
设置byte currenPasswordLength = 4
没有任何帮助。如果按第一个键,它将递增到 5,下一个键将它递增到 6,依此类推。
在 256 次按键后,您将再次获得 4!!!!!!!而且由于您没有清除之前检查过的密码,您会得到“密码错误”的结果(并最终导致堆栈溢出)。
【讨论】:
以上是关于布防/撤防家庭安全系统 arduino 键盘 lcd的主要内容,如果未能解决你的问题,请参考以下文章
详解如何基于Arduino兼容板Teensy LC实现虚拟键盘与鼠标
详解如何基于Arduino兼容板Teensy LC实现虚拟键盘与鼠标