硬件:
Arduino UNO
4x4键盘
9g舵机
LED 灯 x2
LCD1602 显示屏 (用了 a0,a1,a2,a3,a4,a5脚)
目的:输入密码开启电器
问题:现在是输入一数字或字母在LCD上只显示一个数字或字母,本想输入后在显示屏上显示输入的密码串. 有高手能指教的话谢谢了.
代码:
//Arduino通过输入密码控制电器运行
#include <Password.h>
#include <Keypad.h>
#include <Servo.h> //使用舵机
#include <LiquidCrystal.h>
LiquidCrystal lcd(A5,A4,A3,A2,A1,A0); //构造一个LiquidCrystal的类成员。使用数字IO ,12,11,5,4,3,2
Servo myservo; //声明 servo
Password password = Password( "1234" ); //解锁密码 ,输入密码后按A ,B 清空密码
const byte ROWS = 4; // 四行
const byte COLS = 4; // 四列
// 定义键盘
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
//行
byte rowPins[ROWS] = { 2, 3,4, 5 };
//列
byte colPins[COLS] = { 6, 7, 8, 9 };
// 建立键盘
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
Serial.begin(9600);
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(A4, OUTPUT);
pinMode(A5, OUTPUT);
pinMode(11, OUTPUT); //绿灯
pinMode(12, OUTPUT); //红灯
myservo.attach(13); //舵机digital pin 13
//舵机
keypad.addEventListener(keypadEvent); //增加对键盘的侦听
lcd.begin(16,2); //初始化LCD1602
lcd.print("4x4 Key-Password"); //液晶显示Welcome to use!
delay(1000); //延时1000ms
lcd.clear(); //液晶清屏
}
void loop(){
lcd.setCursor(0,0); //设置液晶开始显示的指针位置
lcd.print("4x4 Key-PassWord");
keypad.getKey();
myservo.write(0);
}
//注意一些特殊的事件
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
lcd.setCursor(0,1); //设置液晶开始显示的指针位置
lcd.print("Enter: ");
lcd.print(eKey); //显示输入的字母数字. 这里最好是显示完整的密码.
//Serial.print("Enter: ");
//Serial.println(eKey);
delay(10);
switch (eKey){
case 'A': checkPassword(); delay(1); break;
case 'B': password.reset(); delay(1); break;
default: password.append(eKey); delay(1);
}
}
}
void checkPassword(){
if (password.evaluate()){
lcd.setCursor(0,1); //设置液晶开始显示的指针位置
lcd.print("Accepted");
//Serial.println("Accepted");//如果密码正确开锁
delay(10);
//如果开始工作,运行以下代码
myservo.write(90); //转90度
digitalWrite(11, HIGH);//打开
delay(5000); //等待5秒
digitalWrite(11, LOW);// 关闭
}else{
lcd.setCursor(0,1); //设置液晶开始显示的指针位置
lcd.print("Denied");
// Serial.println("Denied"); //如果密码错误保持锁定
delay(10);
//如果没有开始工作,运行以下代码
myservo.write(0);
digitalWrite(12, HIGH); //打开
delay(5000); //等待5秒
digitalWrite(12, LOW);//关闭
}
}
|