【问题标题】:Arduino blinking led issueArduino闪烁导致问题
【发布时间】:2015-04-18 22:13:06
【问题描述】:

好的,所以我在 Arduino Uno 上开始了我的项目 2。它涉及 3 个闪烁的 LED。最初的想法是绿色 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) 之后插入另一个延迟时,它起作用了。对此有何解释?我是新手,所以请解释清楚。

【问题讨论】:

    标签: if-statement arduino-uno


    【解决方案1】:

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

    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 时保持关闭状态。

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

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

    这有帮助吗?

    【讨论】:

    • 我知道在 digitalWrite(3, LOW) 和 digitalWrite(3, HIGH) 之间需要几毫秒的时间,但是仍然应该会出现 1s 的延迟,对吧?如果条件相同(未按下开关),进程会不会像循环一样运行?
    • @RuslanMushkaev 是的,确实如此。然后将 LED 重新打开。如果您愿意,我可以尝试为您绘制波形图。可能更容易以图形方式查看。换个角度想,你的 LED 实际上是在闪烁。但是“OFF”状态太短了,你的人看不到它。很久以前,我实际上做了一个设计,可以通过这样做来改变 LED 的亮度。这里有一个 arduino 设计:arduino.cc/en/tutorial/fade 做同样的事情。
    • 好的,谢谢,我想我明白了——它确实每秒都在闪烁,但闪烁的速度非常快,以至于我看不到它。这可以通过调整 LOW 部分之后的延迟来改变。
    • @RuslanMushkaev 是的,你明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2012-07-23
    • 2011-10-23
    相关资源
    最近更新 更多