arduino - Arduino analogWrite() 导致程序冻结
问题描述
我正在编写一些 Arduino 代码,用于在基本级别控制我的 3D 打印机器人。一切正常,直到我模拟写入()到 ledPin(Nano 上的引脚 11)的值不再为 0。这段代码的目的是在不使用延迟()函数的情况下根据环境照明淡化一些 LED 的开/关暂停程序。
此处的代码确定环境光是否低于阈值,是否经过了 4 毫秒以及 LED 是否处于目标亮度,然后相应地增加/减少模拟写入()的值。当这个值(lightVal)增加时,整个程序冻结并保持在冻结之前的状态。(机器人变得无响应,串行数据停止发送。)我注释掉analogWrite()的那一刻,冻结不会发生。
timer = millis();
aLightVal = analogRead(LDR);
aLightVal = map(aLightVal, 0, 600, 0, 100);
//Check to see if the ambient light is below threshold
//If LED is not yet at target brightness, fade every 4 milliseconds
if (aLightVal < 40){
if (timer - currentTime > 4){
if (lightVal < 255){
lightVal++;
currentTime = timer;
}
}
}
if (aLightVal >= 40){
if (timer - currentTime > 4){
if (lightVal > 0){
lightVal--;
currentTime = timer;
}
}
}
analogWrite(ledPin, lightVal);
Serial.println(aLightVal);
如果有帮助,我正在程序中使用 Servo.h 和 Ultrasonic.h 库?
我初始化变量如下:
const int LDR = A1;
const int ledPin = 11;
unsigned long timer = 0;
unsigned long currentTime = 0;
int aLightVal;
int lightVal = 0;
有什么建议吗?请让我知道,我将不胜感激!
解决方案
推荐阅读
- reactjs - 用firebase问题反应原生
- python - 如何删除python中的重复值?
- awk - awk 匹配两个文件的第 3 列并打印 file1 的剩余部分
- arrays - 在 SnowSql 中按行查找两个列之间的差异,这两个列都是数组
- azure - 计算机视觉 OCR 提取完成后触发通知
- python - 当从 VS Code 集成终端运行 Python 时,matplotlib 图形不会显示
- python - scrapy 在表中返回太多行
- python - 如何在使用 str.contains pandas 时打印列表中的缺失项
- javascript - 基于令牌和网址重定向的最佳方式是什么?反应路由器dom
- string - 通过在 do loop SAS 中附加来创建列表