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

超声模块控制继电器问题

用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 三菱变频器模块怎么检测触发
  • ¥15 在C#方法中使用了.Refresh();刷新了控件,但是不是最新值
  • ¥30 求一下解题思路,完全不懂。
  • ¥30 关于#硬件工程#的问题:求一下解题思路
  • ¥15 运筹学对偶单纯行法构造扩充问题
  • ¥20 XP系统的老电脑一开机就提示找不到rundll.exe,付费求解
  • ¥15 milvus查询出来的score怎么转换成0-1之间的相似性
  • ¥15 多ip服务器站群如何搭建l2tp服务器
  • ¥15 lvgl V9移植到linux开发板
  • ¥15 VB.net中在窗体中创建一个button控件来关闭窗体,但是提示错误,我该怎么办