Arduino眨眼导致问题

时间:2015-04-18 22:13:07

标签: if-statement arduino-uno

好的,所以我在Arduino Uno上开始了我的Project 2。它涉及3个闪烁的LED。最初的想法是绿色指示灯将点亮,直到按下一个开关,这将使另外两个LED连续闪烁。但是,我试图让绿色LED保持闪烁,直到我按下开关(而不是在按下开关之前被动点亮)。所以我对if语句进行了一次小调整,但这没有用(led闪烁一次然后继续点亮)。

    int switchState=0;

void setup() {
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(2, INPUT);

// put your setup code here, to run once:

}

void loop() {

switchState= digitalRead(2);

if (switchState==LOW) {

digitalWrite(3, HIGH);
delay(1000);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}

else {

digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5, HIGH);

delay(250);

digitalWrite(4, HIGH);
digitalWrite(5, LOW);

delay(250);

}


// put your main code here, to run repeatedly:

}

绿色LED分配给pd3,另外两个LED分配给pd4和pd5。

那么为什么在验证条件后(无论是否按下开关),LED是否只闪烁一次 - 不应该继续闪烁?但是当我在第二个digitalWrite(3,LOW)之后插入另一个延迟时,它工作了。对此有何解释?我是新手,所以请明确说明。

1 个答案:

答案 0 :(得分:0)

案例1: 用户不按下开关至少> delay(1000);再次投放。 在本节中:

switchState= digitalRead(2);
if (switchState==LOW)       // <----  User is not pressing switch so we 
{                           //        enter the if.
    digitalWrite(3, HIGH);
    delay(1000);
    digitalWrite(3, LOW);
    // Adding delay here makes it blink.
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
}

完成digitalWrite(3, LOW);之后,在循环重复之前它是微/毫秒,然后再次输入if。 LED实际上确实闪烁了,但它是如此之快,你无法看到它。只要用户没有按下按钮,LED就会保持亮起状态。

案例2: 用户按下按钮并在完成if语句后至少运行一次。 LED进入其他位置时保持关闭状态。

else
{
   digitalWrite(3,LOW);
   digitalWrite(4,LOW);
   digitalWrite(5, HIGH);
   delay(250);
   digitalWrite(4, HIGH);
   digitalWrite(5, LOW);
   delay(250);
}

LED再次设置为LOW,然后保持OFF。

这有帮助吗?