承接上集

在经历一番的物资采购后,东西终于备全了,而且还把开发版升级了一下,升级成了Mega
在看到Mega的时候,我一直认为这玩意儿好像一个PLC模块啊!
话不多说,先上连线效果图

完整连线图
这里面之所以加了一个双路的继电器,是因为学校里面有一个项目正好用到双路继电器,况且我周围也没有太好地显示按键检测情况的外设,只能先将就一下。
这个项目还是一样,代码我会放出来开源,欢迎大家学习交流。
新代码与之前在UNO上的代码有很大的不同,已经用到了其他大佬编写的第三方库。
#include <Password.h> //就是这个库,我也一并在后面的链接中附上 先是库的引用以及各种引脚外设的定义
#include <Password.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
//LCD1602显示屏设置
LiquidCrystal_I2C lcd(0x27,16,2);
//键盘输入以及引脚设定
const byte numRows= 4;
const byte numCols= 4;
char keymap[numRows][numCols]= {
{'D','#','0','*'},
{'C','9','8','7'},
{'B','6','5','4'},
{'A','3','2','1'}
};
byte rowPins[numRows] = {9,8,7,6};
byte colPins[numCols]= {5,4,3,2};
//键盘初始化
Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
//密码设定
Password passwd = Password("7355608");
//设定改密码的数组
char passwd2[6]="";
//继电器引脚设定 relayPin按键检测 relayPin1为输出
const int relayPin =11;
const int relayPin1 =13; 下面setup函数
void setup() {
Serial.begin(9600); //时钟速率
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Enter Password: ");//LCD初始输入显示设置
pinMode(relayPin, OUTPUT);
pinMode(relayPin1, OUTPUT); //继电器引脚设定
} 下面显示主体的的循环函数
void loop() {
char key = myKeypad.getKey(); //按键采集
if (key != NO_KEY){
digitalWrite(relayPin,HIGH);
delay(300);
digitalWrite(relayPin,LOW);
Serial.print(key);
delay(50); //按键反馈
switch (key){
case 'D': changepasswd(); break; //换密码
case '*': checkpasswd(); break; //验证密码
case '#':{ passwd.reset(); //系统刷新键
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Enter Password ");
break;
}
default: passwd.append(key);
}
}
} 下面就是一些要利用的函数的定义:
void(* restFunc)(void) = 0; //重置整个系统
void checkpasswd() {
if (passwd.evaluate()){
lcd.clear();
Serial.println("OK.");
lcd.setCursor(0,0);
lcd.print(" SuccessfuL ");
digitalWrite(relayPin1,HIGH);
delay(50);
digitalWrite(relayPin1,LOW); //密码正确,触发
} else {
digitalWrite(relayPin1,LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Wrong Password! ");
Serial.println("Wrong password!"); //密码错误,无其他效果
}
restFunc();
}
void changepasswd(){ //更换密码
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Change Password:");
for(byte i=0;i<5;i++){
char key = NO_KEY;
while(key == NO_KEY || key=='*' || key=='#' || key=='D') key = myKeypad.getKey();
passwd2[i] = key;
delay(60);
}
passwd2[5] = '\0';
passwd.set(passwd2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" PW Changed To: ");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.print(passwd2);
lcd.print(" ");
Serial.print("Password changed to ");
Serial.println(passwd2);
} 这就是整体的代码的情况,时间仓促,有问题的地方也请在评论区友善交流。
我把代码文件和Password库上传到了Gitee上面,大家可以自行下载。
代码文件:https://gitee.com/jasonguo91340/arduino-mega-csgoc4.git