Arduino密码锁设计
本节用4×4键盘设计一个密码锁的模型,从键盘获取输入键值,并将输入值与设定密码比较,若相同控制舵机转动打开锁就行了。
(1)4×4键盘及扩展库调用
4×4键盘有8根引线,每个按键对应一个行值和列值,通过定义一个二维数组就可以确定按的是哪个键了,如图1,调用Keypad.h扩展库,可以直接找到对应的键,不需自己编写程序去判断了。
注意:需把厂商提供的Keypad文件夹放到Arduino IDE的libraries文件夹里,否则编译会失败。
(2)电路图和连线
电路原理图如图2,D2-9接键盘8根引脚,注意线的排列顺序,如排列顺序不同,则编写程序时,定义的行号、列号顺序也不同。连线好的实物图如图2,用积木拼插了一个简单的门,当舵机臂水平时锁上,转到竖直就可以打开门了。
(3)程序编写
程序代码如下,结合注释同学们讨论、理解。
#include //加载库
#include
char keys[4][4] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};//建立二维数组,用于设置按键的输出字符
byte rowPins[4] = {9,8,7,6}; //定义行引脚
byte colPins[4] = {5,4,3,2}; //定义列引脚
Keypad keypad = Keypad( makeKeymap(keys),rowPins, colPins, 4, 4 );//实例化Keypad 对象
Servo servo_10;
int m=0;
int i=0;
void setup(){
servo_10.attach(10);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
}
void loop(){
char key = keypad.getKey(); //新建一个key 变量 用于获取键盘当前的值
if (key!= NO_KEY){
m=m+1;
if(i==0&key=='A'){
i=i+1;
}
elseif(i==1&key =='B'){
i=i+1;
digitalWrite(11,HIGH);
servo_10.write(180);
delay(10000);
digitalWrite(11,LOW);
m=0;
}
else{i=0;
}
if(m==2&i!=2){
digitalWrite(12,HIGH);
servo_10.write(90);
i=0;
m=0;
delay(5000);
digitalWrite(12,LOW);
}
}
}
(4)功能演示
当输入错误密码,红灯亮5秒并锁定输入5秒(5秒内输入无效),且舵机臂水平,门锁闭。若密码正确绿灯亮10秒,并锁定输入10秒,10秒后重置,舵机臂竖直向上,门打开,如图3。
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com