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

Arduino ATmega2560读取HC-S501 PIR传感器引脚输入失败求助

问题分析与修复

你的代码核心问题是引脚寄存器对应错误:

  • Arduino Mega 2560的数字引脚7对应的硬件寄存器是PINH的PH4位,而非你代码中读取的PIND7(PIND7对应数字引脚2)。这直接导致你读取的不是传感器连接的引脚,自然无法检测到信号。

修复后的代码

int main(void)
{
    int pir_out;

    pir_out = 0;
    DDRH &= ~(1 << PORTH4);  // 设置PH4(数字引脚7)为输入
    DDRB |= 1 << PORTB7;     // 设置PB7(数字引脚13,板载LED)为输出
    PORTH &= ~(1 << PORTH4); // 禁用PH4上拉电阻(HC-S501无需上拉)
    PORTB &= ~(1 << PORTB7); // 初始关闭LED

    while (1)
    {
        pir_out = PINH & (1 << PORTH4); // 读取PH4引脚状态
        if (pir_out)
            PORTB |= 1 << PORTB7;       // 检测到运动,点亮LED
        else
            PORTB &= ~(1 << PORTB7);    // 无运动,关闭LED
    }
}

额外检查项

  • 确认HC-S501接线正确:VCC接5V,GND接开发板GND,OUT引脚接Arduino数字引脚7。
  • PIR传感器需要1-2分钟预热时间,上传代码后请等待片刻再测试。
  • 若仍无反应,可尝试启用上拉电阻(将PORTH &= ~(1 << PORTH4)改为PORTH |= (1 << PORTH4)),部分传感器可能需要外部上拉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:15:05