arduino密码锁--密码正确舵机转动(极简单版)

入伏哦

目录

1、Arduino、矩阵键盘、舵机的接线

2、代码上传

3、简单讲解


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);
    }

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值