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

超声模块控制继电器问题

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

 

  • 写回答

1条回答 默认 最新

  • 做更好的自己!!! 2024-05-30 21:12
    关注

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

    确保在你的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日

悬赏问题

  • ¥30 matlab appdesigner私有函数嵌套整合
  • ¥15 给我一个openharmony跑通webrtc实现视频会议的简单demo项目,sdk为12
  • ¥15 vb6.0使用jmail接收smtp邮件并另存附件到D盘
  • ¥30 vb net 使用 sendMessage 如何输入鼠标坐标
  • ¥15 关于freesurfer使用freeview可视化的问题
  • ¥100 谁能在荣耀自带系统MagicOS版本下,隐藏手机桌面图标?
  • ¥15 求SC-LIWC词典!
  • ¥20 有关esp8266连接阿里云
  • ¥15 C# 调用Bartender打印机打印
  • ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题