首页 > 解决方案 > 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;

有什么建议吗?请让我知道,我将不胜感激!

标签: arduino

解决方案


推荐阅读