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

Arduino Nano调用analogWrite()控制LED时程序冻结问题求助

故障根因

你遇到的冻结问题是典型的Arduino定时器资源冲突导致的:
Arduino Nano采用的ATmega328P主控中,Servo.h库默认会占用16位定时器1,而引脚9、11的PWM输出(也就是analogWrite()功能)正好由定时器1提供控制。当你向11引脚输出非0的PWM值时,会和已经被Servo库占用的定时器资源产生冲突,直接导致程序跑飞冻结,这也是你注释掉analogWrite()代码后故障立刻消失的原因。

解决建议

  • 优先更换LED输出引脚(最简单方案)
    选择其他不受定时器1控制的PWM引脚即可,Arduino Nano支持PWM的引脚有3、5、6、9、10、11,避开9、11这两个被定时器1控制的引脚即可,比如换为3号引脚,只需要修改初始化代码里的引脚定义:
    const int ledPin = 3;
    
    其余逻辑代码无需任何调整即可正常运行。
  • 若必须使用11号引脚作为LED输出
    可以更换舵机驱动库,改用ServoTimer2.h库驱动舵机,这个库会使用定时器2来驱动舵机,不会占用定时器1,即可避免冲突。但需要注意使用这个库后,3、10引脚的PWM输出功能会被占用,不能再调用analogWrite()控制这两个引脚。
  • 额外接线检查
    确认LED回路已经串联220Ω-1kΩ的限流电阻,避免LED导通电流过大拉低单片机供电电压导致异常重启,虽然这不是本次故障的核心原因,但属于必要的硬件防护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:45:05