Submit

17 / 20

密码门锁

扫描 3 × 4 矩阵键盘,用正确密码打开舵机锁。

运行此实验 →
ESP32 教学电路插图,显示模组、引脚和本课实验元件

实验目标

输入 1234 并按 # 开锁,按 * 清除后尝试错误密码。

工作原理

扫描 3 × 4 矩阵键盘,用正确密码打开舵机锁。 四行三列形成十二个交点,逐列扫描即可定位闭合的按键。 此处为配套教学模型,硬件示例基于经典 ESP32 与 Arduino-ESP32 3.x;网络、声波、负载和机械运动均为简化演示。

动手试一试

  1. 打开此实验
  2. 输入 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; }
}

检查理解

为什么十二个按键只需要七根线?

查看答案

四行三列形成十二个交点,逐列扫描即可定位闭合的按键。

参考资料

Arduino-ESP32 ↗ · GPIO 参考 ↗

MAKE A THOUGHTFUL CHOICE

Your shortlist, side by side.

Pricing models are indicative. Check each official website for current plans and limits.