You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino合并PIR传感与NRF遥控步进电机代码冲突问题求助

问题核心原因

你代码存在引脚资源冲突,这是导致功能异常的直接原因:

  • NRF24L01的CE引脚被定义为7号:RF24 radio(7, 8);
  • 第三个PIR传感器的输入引脚也被定义为7号:int pirSensor3 = 7;
    NRF初始化时会修改7号引脚的工作模式,直接覆盖了PIR传感器的输入配置,所以只要启用NRF初始化,PIR3的读数就会完全异常,进而导致整套PIR传感逻辑失效。
修复步骤
  1. 调整引脚分配

将第三个PIR传感器的引脚改为未被占用的空闲IO,比如11号:

// 修改前
// int pirSensor3 = 7;
// 修改后
int pirSensor3 = 11;

接线时同步将第三个PIR的输出端接到11号数字引脚即可。

  1. 补全模式切换逻辑

你可以新增一个按键实现模式切换,参考修改代码如下:
首先新增全局定义:

// 新增模式按键引脚,接按键一端到GND,另一端到12号引脚
const int modeBtn = 12;
// 存储当前工作模式,默认PIR模式
bool isNRFMode = false;
// 按键消抖用变量
unsigned long lastBtnPress = 0;
const unsigned long btnDebounce = 200;

setup中新增按键初始化,取消NRF初始化的注释:

void setup() {
  pinMode(pirSensor1, INPUT);
  pinMode(pirSensor2, INPUT);
  pinMode(pirSensor3, INPUT);
  // 按键用上拉输入,默认高电平,按下为低
  pinMode(modeBtn, INPUT_PULLUP);
  Serial.begin(9600);
  // 取消NRF初始化注释
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
}

loop中修改逻辑,先判断按键切换模式,再执行对应功能:

void loop() {
  // 按键模式切换逻辑
  if(digitalRead(modeBtn) == LOW && millis() - lastBtnPress > btnDebounce) {
    isNRFMode = !isNRFMode;
    lastBtnPress = millis();
    Serial.print("切换到");
    Serial.println(isNRFMode ? "遥控模式" : "PIR传感模式");
    // 切换模式时清空残留命令
    cCommand = '0';
  }

  if(isNRFMode) {
    // 遥控模式逻辑:先判断是否有NRF数据,再读取
    if(radio.available()) {
      char text[32] = "";
      radio.read(&text, sizeof(text));
      if (text[0] != '\0') {
        cCommand = text[0];
      }
    }
    // 执行遥控命令
    if(cCommand == '1'){
      stepper.moveDegreesCCW (5);
      Serial.println(cCommand);
      cCommand = '0';
    }
    else if(cCommand == '2'){
      stepper.moveDegreesCW (5);
      Serial.println(cCommand);
      cCommand = '0';
    }
    else if(cCommand == '9'){
      // 收到切PIR模式的命令也可以直接切换
      isNRFMode = false;
      Serial.println("切换到PIR传感模式");
      cCommand = '0';
    }
  } else {
    // PIR传感模式逻辑
    SensorMode();
  }
}
  1. 可选优化

如果对功耗有要求,可以在切换到PIR模式时调用radio.powerDown()关闭NRF模块,切换回遥控模式时调用radio.powerUp()重新唤醒,进一步降低引脚干扰概率。

内容的提问来源于stack exchange,提问作者Verne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:27:03