睿765 2021-05-28 23:20 采纳率: 0%
浏览 94

超声模块控制继电器问题

用Arduino开发,使用超声模块控制继电器控制屏幕电源,薄膜键盘输入密码用屏幕显示但不行。删除输入有关的语句屏幕就能随信号开断了

 

  • 写回答

1条回答 默认 最新

  • 关注

    根据你的描述,问题可能出在输入密码的代码与超声波模块和继电器控制代码之间的冲突上。以下是一个可能的解决方案,包括超声波模块控制继电器和薄膜键盘输入密码的完整代码示例。

    确保在你的Arduino开发环境中已安装必要的库,如 LiquidCrystal_I2CKeypad 库。

    #include <LiquidCrystal_I2C.h>
    #include <Keypad.h>
    
    // 超声波传感器引脚定义
    const int trigPin = 9;
    const int echoPin = 10;
    
    // 继电器引脚定义
    const int relayPin = 8;
    
    // LCD 显示器初始化
    LiquidCrystal_I2C lcd(0x27, 16, 2);
    
    // 密码输入的相关设置
    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] = {5, 4, 3, 2};
    byte colPins[COLS] = {A0, A1, A2, A3};
    Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
    
    // 预设密码
    String password = "1234";
    String inputPassword = "";
    
    void setup() {
      pinMode(trigPin, OUTPUT);
      pinMode(echoPin, INPUT);
      pinMode(relayPin, OUTPUT);
      digitalWrite(relayPin, LOW); // 继电器初始化为关闭状态
    
      lcd.init();
      lcd.backlight();
      lcd.setCursor(0, 0);
      lcd.print("Enter Password:");
    }
    
    void loop() {
      // 读取键盘输入
      char key = keypad.getKey();
      if (key) {
        if (key == '#') {
          if (inputPassword == password) {
            lcd.clear();
            lcd.print("Access Granted");
            delay(2000);
            lcd.clear();
            inputPassword = "";
          } else {
            lcd.clear();
            lcd.print("Access Denied");
            delay(2000);
            lcd.clear();
            inputPassword = "";
          }
          lcd.print("Enter Password:");
        } else if (key == '*') {
          inputPassword = "";
          lcd.clear();
          lcd.print("Enter Password:");
        } else {
          inputPassword += key;
          lcd.setCursor(0, 1);
          lcd.print(inputPassword);
        }
      }
    
      // 超声波传感器测距
      long duration, distance;
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
    
      duration = pulseIn(echoPin, HIGH);
      distance = (duration / 2) / 29.1; // 将时间转换为距离
    
      // 根据距离控制继电器
      if (distance < 10) { // 距离小于10cm时,开启继电器
        digitalWrite(relayPin, HIGH);
      } else { // 否则关闭继电器
        digitalWrite(relayPin, LOW);
      }
    
      delay(100); // 延时,避免过于频繁的触发
    }
    

    代码说明:

    1. LCD显示屏:用于显示输入的密码和状态信息。
    2. 薄膜键盘:用于输入密码。
    3. 超声波传感器:用于检测物体距离。
    4. 继电器:根据超声波传感器的检测结果控制继电器的开关。

    主要功能:

    • 输入正确的密码后,显示 "Access Granted",并清除输入。
    • 输入错误的密码后,显示 "Access Denied",并清除输入。
    • 通过超声波传感器检测距离,小于10厘米时开启继电器,其他情况下关闭继电器。

    请确保硬件连接正确,并根据需要调整引脚定义和其他参数。运行此代码应能实现你描述的功能。

    评论

报告相同问题?

问题事件

  • 专家修改了标签 5月30日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵