17 / 20
密码门锁
扫描 3 × 4 矩阵键盘,用正确密码打开舵机锁。
运行此实验 →实验目标
输入 1234 并按 # 开锁,按 * 清除后尝试错误密码。
工作原理
扫描 3 × 4 矩阵键盘,用正确密码打开舵机锁。 四行三列形成十二个交点,逐列扫描即可定位闭合的按键。 此处为配套教学模型,硬件示例基于经典 ESP32 与 Arduino-ESP32 3.x;网络、声波、负载和机械运动均为简化演示。
动手试一试
- 打开此实验
- 输入 1234 并按 # 开锁,按 * 清除后尝试错误密码。
接线
- 13,14,27,32 / 25,26,33 — 四行/三列
- GPIO 18 — 门锁舵机信号
示例代码
#include <Keypad.h>
#include <ESP32Servo.h>
char keys[4][3]={{'1','2','3'},{'4','5','6'},{'7','8','9'},{'*','0','#'}};
byte rows[4]={13,14,27,32}, columns[3]={25,26,33};
Keypad keypad=Keypad(makeKeymap(keys),rows,columns,4,3);
Servo latch; String entry; unsigned long unlockedAt=0;
// Educational lock; not an access-control security product.
void setup() {
latch.setPeriodHertz(50); latch.attach(18, 500, 2400); latch.write(0);
}
void loop() {
char key = keypad.getKey();
if (key) {
if (key == '*') { entry = ""; latch.write(0); }
else if (key == '#') {
bool valid = entry == "1234"; latch.write(valid ? 90 : 0);
unlockedAt = valid ? millis() : 0; entry = "";
} else if (entry.length() < 8) entry += key;
}
if (unlockedAt && millis() - unlockedAt > 3000) { latch.write(0); unlockedAt = 0; }
}检查理解
为什么十二个按键只需要七根线?
查看答案
四行三列形成十二个交点,逐列扫描即可定位闭合的按键。