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
相关产品推荐
相关产品推荐

