Arduino LED闪烁问题

时间:2017-05-19 06:03:43

标签: android bluetooth arduino led

所以我有一个蓝牙模块,我已经创建了一些代码,所以当我按下按钮1时它会打开LED,当我按2时它会关闭LED,而3应该是领导不断眨眼。一切都运行得很好,除了当我按3次LED闪烁一次然后停止。我可以对代码做什么让它连续闪烁,直到我再次按下按钮1或2?

char LED = 0;

void setup() {
    pinMode(13, OUTPUT);
    Serial.begin(9600); // Opens Serial port 
}

void loop() {
    if (Serial.available()> 0){
        LED = Serial.read();
        Serial.print(LED);

        if (LED == '1') 
            digitalWrite(13, HIGH);
        if (LED == '0') 
            digitalWrite(13, LOW);
        if (LED == '3') {
            digitalWrite(13, HIGH);
            delay(1000);
            digitalWrite(13, LOW);
            delay(1000);
        }
    }
}

2 个答案:

答案 0 :(得分:6)

您需要将主循环更改为:

void loop() {
    if (Serial.available()> 0){
        LED = Serial.read();
        Serial.print(LED);
    }

    if (LED == '3') {
        digitalWrite(13, HIGH);
        delay(1000);
        digitalWrite(13, LOW);
        delay(1000);
    }
    else if (LED == '1') 
        digitalWrite(13, HIGH);
    else if (LED == '0') 
        digitalWrite(13, LOW);
}

在这种情况下LED == '3'将在每次循环迭代时起作用,即使Serial不包含任何数据

答案 1 :(得分:0)

您将闪烁的代码放入if (Serial.available()> 0)块,这意味着它仅在您发送'3'时运行。您需要继续发送'3'以保持LED闪烁。

谢尔盖为您提供了一个有效的解决方案,但该代码不必要地保持开启或关闭LED,并且由于使用delay而LED指示灯闪烁,代码无响应。

要修复这些问题,您需要使用变量来保持状态(在谢尔盖的代码中,该角色使用现有的LED变量)并使用millis()代替{{1}用于闪烁,就像内置的Arduino IDE示例中的BlinkWithoutDelay一样。

delay()