如何解决闪烁的LED指示灯无延迟不起作用
我的arduino项目有问题。它应该有两种模式:正常和危险。两者之间的切换是通过Visual Studio形式进行的。正常模式下的闪烁指示灯工作正常,但是当我尝试切换到危险模式时,它们的闪烁非常暗。在危险模式下,红色,黄色和蓝色的指示灯必须同时闪烁。我的代码做到了,只有红色的LED才能正常工作。我猜这与我在正常模式下使用其他两个有关。
void loop() {
unsigned long currentMillisYellow = millis();
unsigned long currentMillisBlue = millis();
unsigned long currentMillisRed = millis();
unsigned long currentMillisGreen = millis();
int steerAngle = map(analogRead(Potentiometer),1024,-100,100);
//..........................................................normal state blinking
if (rightCounter > 0 && steerAngle > 0 && state == NormalState) {
if (currentMillisBlue - previousMillisBlue > blinkIntervalBlue) {
previousMillisBlue = currentMillisBlue;
ledBlueState = !ledBlueState;
digitalWrite(ledBlue,ledBlueState);
}
} else {
rightCounter = 0;
digitalWrite(ledBlue,LOW);
}
if (leftCounter > 0 && steerAngle < 0 && state == NormalState) {
if (currentMillisYellow - previousMillisYellow > blinkIntervalYellow) {
previousMillisYellow = currentMillisYellow;
ledYellowState = !ledYellowState;
digitalWrite(ledYellow,ledYellowState);
}
} else {
leftCounter = 0;
digitalWrite(ledYellow,LOW);
}
//..........................................................hazard state blinking
if (state == HazardState) { //why is the led brightness so low? (needs to be fixed)
if (currentMillisYellow - previousMillisYellow > blinkIntervalYellow) {
previousMillisYellow = currentMillisYellow;
ledYellowState = !ledYellowState;
digitalWrite(ledYellow,ledYellowState);
}
}
if (state == HazardState) {
if (currentMillisBlue - previousMillisBlue > blinkIntervalBlue) {
previousMillisBlue = currentMillisBlue;
ledBlueState = !ledBlueState;
digitalWrite(ledBlue,ledBlueState);
}
}
if (state == HazardState) {
if (currentMillisRed - previousMillisRed > blinkIntervalRed) {
previousMillisRed = currentMillisRed;
ledRedState = !ledRedState;
digitalWrite(ledRed,ledRedState);
}
}
解决方法
blinkIntervals是否足够长以产生足够的延迟,以便可以正确地看到LED指示灯闪烁?据我了解,您正在尝试闪烁,即先将它们打开然后关闭一小段时间。在这种情况下,您可能更喜欢定义ON和OFF间隔,如this教程的第二个示例代码中所做的那样。
另外,如@Juraj所说,您的else
块正在将它们关闭,这可能就是您看到昏暗的灯光的原因。
我将定义状态,而不是在if条件中比较状态。像这样:
typedef enum {
NORMAL,HAZARD
} Modes;
Modes state = NORMAL;
然后,在您的主循环中:
if( state == NORMAL){
// execute LEDs blinking
} else if(state == HAZARD){
// execute LEDs blinking
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。