开头:由于自己买的LCD没有焊接,需要的arduino插口较多,所以没有选择LCD进行显示信息而改为电脑串口显示器窗口显示,代码纯手打,开源不易,请勿喷。
接线:薄膜键盘的针脚是从2接到9
舵机是10号脚
红色led接12号
绿色led接13号
蜂鸣器接11号,当然可以将蜂鸣器和红色灯接到一起,但是声音不大。
#include <Keypad.h>
#include<Servo.h>
const byte ROWS = 4; //4 rows
const byte COLS = 4; //4 columns
char passwd='1';int temp=1;
char keys[ROWS][COLS] = {//对应自己想要打印出的字符
{'D','=','0','*'},
{'C','9','8','7'},
{'B','6','5','4'},
{'A','3','2','1'}};
String firstNum = "";
float password = 456;//设置默认密码
int demo=1;//这是用来转换模式用的
Servo myservo;
int pos=0;//舵机旋转角度
float result = 0.0;//结果
char operatr = ' ';
byte rowPins[ROWS] = {5, 4, 3, 2}; //连接到键盘的行插脚
byte colPins[COLS] = {9,8, 7, 6}; //连接到键盘的列插脚
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );//实例化Keypad 对象
void setup(){
Serial.begin(9600);
pinMode(11,OUTPUT);//蜂鸣器
pinMode(12,OUTPUT);//红色led灯
pinMode(13,OUTPUT);//绿色led灯
digitalWrite(12,LOW);digitalWrite(13,LOW);myservo.attach(10);
}
void loop(){
Serial.println("如忘记密码请添加微信18476618070进行修改密码。");
Serial.println("输入密码后按'#'键以确认,按’*’键重输:");
Serial.print("请输入密码:");
while(1){char key = keypad.getKey();//新建一个key 变量 用于获取键盘当前的值
if(demo==1){
if (key != NO_KEY && (key == '1' || key == '2' || key == '3'||key == 'A' ||key == 'B' ||key == 'C' ||key == 'D' || key == '4' || key == '5' ||key == '.' ||key == '*' || key == '6' || key == '7' || key == '8' || key == '9' || key == '0')) {
Serial.print(key);firstNum =firstNum +key;}
else if(key != NO_KEY &&(key == '=' )){demo=2;} }
if(demo==2)
{Serial.println("");
if(firstNum.toFloat() == password){Serial.println("欢迎回家!");
for(demo=1;demo<=3;demo++){
digitalWrite(13,HIGH);delay(200);digitalWrite(13,LOW);delay(200);}
for(demo=1;demo<=1;demo++)
{for(pos=0;pos<=180;pos++)
{myservo.write(pos);delay(5);}
delay(2000);
for(pos=180;pos>=0;pos--)
{myservo.write(pos);delay(5);}}
Serial.print("请输入密码:");}
else{Serial.print("输入错误!请重新输入密码:");
for(demo=1;demo<=3;demo++){
digitalWrite(12,HIGH);tone(11,2093);delay(200);digitalWrite(12,LOW);noTone(11);delay(200);}}
firstNum = "";demo=1;temp=0;}
} }
下面是效果图: