Arduino循环执行7次后停止运行的问题排查求助
Arduino距离传感器+伺服电机:loop循环7次后停止的问题排查
先把你的问题和代码贴出来方便参考:
我将Arduino连接了一个距离传感器和伺服电机(Servo)。执行第7次读数后,loop循环停止运行,串口监视器也不再输出任何内容。附上代码如下:
#include <Servo.h> Servo myservo; void setup() { Serial.begin(9600); myservo.attach(9); delay(15); } void loop() { const int analogInPin = A0; int sensorValue = 0; sensorValue = analogRead(analogInPin); int outputValue = 0; outputValue = map(sensorValue, 0, 1023, 255, 0); Serial.println(outputValue); myservo.write(outputValue); del...
我来帮你梳理几个最可能的原因,你可以一步步排查:
1. 代码不完整引发的运行崩溃
你贴的代码最后一行是del...,明显没粘贴完整——如果是delay()函数漏写了参数或者括号,哪怕编译能勉强通过,运行时也会触发未定义行为,大概率跑几次就卡死。比如你本来想写delay(100),结果只写了del,程序执行到这里就会出错终止。
- 解决:补全
delay()语句,根据你的需求加上合理的延迟值(比如delay(50)),确保代码语法完全正确。
2. 伺服电机电源供应不足
伺服电机转动时需要不小的电流,如果直接从Arduino的5V引脚取电,很容易把Arduino的电源拉低,触发内置的过流保护,最终导致程序停止。尤其是每次loop都调整电机角度,几次循环后电源就扛不住了。
- 排查:给伺服电机接独立的外部电源(注意电机的GND必须和Arduino的GND连在一起,共地才能正常通信),再测试程序是否还会卡死。
3. 距离传感器的信号异常或接线问题
如果传感器接线松动,或者本身故障输出不稳定的模拟信号,可能会导致map()计算出异常值,传给myservo.write()后让电机进入异常状态,进而拖垮整个程序。
- 排查步骤:
- 先检查传感器的VCC、GND、信号线是否插牢;
- 在代码里加一行
Serial.println(sensorValue);,输出原始的传感器读数,看看第7次循环时数值是不是突然出现异常; - 暂时断开传感器,直接给
outputValue赋值固定值(比如outputValue = 90;),看程序会不会一直正常运行——如果正常,那问题肯定出在传感器这边。
4. Servo库的资源冲突
Arduino的Servo库会占用定时器资源,如果你的传感器(或者其他隐藏模块)刚好也用到了同一个定时器,就会出现资源冲突,程序运行几次后崩溃。不过只接一个伺服和一个模拟传感器时,这个概率比较低,但也值得排查。
- 排查:注释掉
myservo.attach(9)和myservo.write(outputValue)这两行,只运行传感器读数和串口输出,如果程序能一直正常跑,那问题就出在伺服电机的资源或电源上。
5. Arduino板卡硬件故障
如果上面的排查都没问题,那可能是Arduino的引脚(比如A0或者引脚9)故障,或者主控芯片本身有问题。
- 排查:换一个模拟引脚读取传感器,换一个数字引脚连接伺服电机,或者直接换一块Arduino板测试。
内容的提问来源于stack exchange,提问作者Zach Cheney
相关产品推荐
相关产品推荐

