Arduino UNO复刻CS:GO中C4示例2——Mega进阶版
DixieBoy
2022年04月20日 23:46
收录于文集
共6篇

承接上集

在经历一番的物资采购后,东西终于备全了,而且还把开发版升级了一下,升级成了Mega

在看到Mega的时候,我一直认为这玩意儿好像一个PLC模块啊!

话不多说,先上连线效果图

完整连线图

这里面之所以加了一个双路的继电器,是因为学校里面有一个项目正好用到双路继电器,况且我周围也没有太好地显示按键检测情况的外设,只能先将就一下。

这个项目还是一样,代码我会放出来开源,欢迎大家学习交流。

新代码与之前在UNO上的代码有很大的不同,已经用到了其他大佬编写的第三方库。

代码块
clike
自动换行
复制代码
#include <Password.h> //就是这个库,我也一并在后面的链接中附上
复制成功

先是库的引用以及各种引脚外设的定义

代码块
clike
自动换行
复制代码
#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函数

代码块
clike
自动换行
复制代码
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);   //继电器引脚设定
} 
复制成功

下面显示主体的的循环函数

代码块
clike
自动换行
复制代码
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); 
      } 
   } 
} 
复制成功

下面就是一些要利用的函数的定义:

代码块
clike
自动换行
复制代码
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