如何打破Arduino中的循环?

时间:2018-06-13 16:54:01

标签: c++ arduino break

我正在尝试在Arduino中编写一个简单的程序,闪烁LED。

程序如下所示。

#define red1 13
#define amber1 12
#define green1 11

void setup() {
    // put your setup code here, to run once:
    Serial.begin(9600);  
    pinMode(red1, OUTPUT);
    pinMode(amber1, OUTPUT);
    pinMode(green1, OUTPUT);
}

void Delay(int sec) {
    for(int i=0;i<sec;i++){
        if (Serial.available())
        {
            Button();
            break;
        }
        delay(1);
     }
}

void Light()
{
    digitalWrite(red1,HIGH);
    Delay(5000);
    digitalWrite(red1,LOW);
    digitalWrite(amber1,HIGH);
    Delay(5000);
    digitalWrite(amber1,LOW);
}

void Button()
{
    digitalWrite(red1,LOW);
    digitalWrite(amber1,LOW);      
    digitalWrite(green1,HIGH);
    delay(1000);
    digitalWrite(green1,LOW);
}

void loop() 
{
    Light();  
}

当我在串行监视器Button()中输入一个值时,它会在函数完成后因函数中断而结束,但此函数会不断重复?如何解决此问题,以便每当串行监视器中断时,Button()会一次执行,然后继续Light()

2 个答案:

答案 0 :(得分:0)

尝试替换

break;

return;

这会立即终止该功能,因为你不会在循环后执行其他语句。

有关return

的详情,请查看https://www.arduino.cc/reference/en/language/structure/control-structure/return/

答案 1 :(得分:0)

正如其他一些人简要提到的那样,由于您没有清除串行接口,因此多次致电Button

现在调用Delay会发生什么,让我们说接口上有可用的信息,然后按预期调用Buttonbreak ,但由于您没有通过阅读可用信息来清除界面,因此在下次调用Button时再次致电Delay

要解决此问题,您需要在致电Button之前在if函数或Button语句中阅读串行接口中的信息。