入伏哦
目录
1、Arduino、矩阵键盘、舵机的接线
(电路图用tinkercad画的,大家也可以试试)
2、代码上传
#include <Keypad.h>
#include <Servo.h>
Servo myServo;
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] = {9, 8, 7, 6}; // 连接到键盘行的引脚
byte colPins[COLS] = {5, 4, 3, 2}; // 连接到键盘列的引脚
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
String password = "1234"; // 预设密码
String inputPassword;
void setup() {
myServo.attach(11);
Serial.begin(9600);
Serial.println("Enter Password:");
}
void loop() {
char key = keypad.getKey();
if (key) {
if (key == '#') { // #表示提交
if (inputPassword == password) {
Serial.println("\nAccess Granted");
myServo.write(180);
} else {
Serial.println("\nAccess Denied");
myServo.write(0);
}
inputPassword = ""; // 清空输入
Serial.println("Enter Password:");
} else if (key == '*') { // *表示清除
inputPassword = "";
Serial.println("\nInput cleared");
Serial.println("Enter Password:");
}
else if (key == 'B') { // B表示退格(此处假设B键作为退格键)
if (inputPassword.length() > 0) {
inputPassword.remove(inputPassword.length() - 1); // 删除最后一个字符
Serial.print("\r"); // 回到行首
Serial.print(" "); // 清除当前行(假设最大输入长度为16)
Serial.print("\r"); // 再次回到行首
for (int i = 0; i < inputPassword.length(); i++) {
Serial.print(inputPassword[i]);
}
}
}
else { // 输入密码
inputPassword += key;
Serial.print(key);
}
}
}
3、简单讲解
我们的密码用字符串保存,每次输入的字符为key,每输入一个就加一个字符,最后加完后的字符和初始的密码进行判断。
首先key用来获取自己的按键的内容
char key = keypad.getKey();
然后 if (key) 表示有字符才进行下一步的判断:
if (key) {
}
如果有字符满足if判断,然后如果按的是#那么要将现在的字符和初始密码进行判断,如果是则舵机旋转180度,否则旋转为0,即不动。判断完清空当前字符。
if (key == '#') { // #表示提交
if (inputPassword == password) {
Serial.println("\nAccess Granted");
myServo.write(180);
} else {
Serial.println("\nAccess Denied");
myServo.write(0);
}
inputPassword = ""; // 清空输入
Serial.println("Enter Password:");
}
下一步,如果输入的是*,那么清空
else if (key == '*') { // *表示清除
inputPassword = "";
Serial.println("\nInput cleared");
Serial.println("Enter Password:");
}
如果输入是退格也就是键盘上的B,那么删除最后一个字符,然后把删除完的打印出来。
else if (key == 'B') { // B表示退格(此处假设B键作为退格键)
if (inputPassword.length() > 0) {
inputPassword.remove(inputPassword.length() - 1); // 删除最后一个字符
Serial.print("\r");
Serial.println("");
Serial.print("\r");
for (int i = 0; i < inputPassword.length(); i++) {
Serial.print(inputPassword[i]);
}
}
}
如果普通情况,就直接加key给inputPassword,最后inputPassword就是最终结果和初始密码判断
else { // 输入密码
inputPassword += key;
Serial.print(key);
}