我正在尝试在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()
。
答案 0 :(得分:0)
尝试替换
break;
与
return;
这会立即终止该功能,因为你不会在循环后执行其他语句。
有关return
答案 1 :(得分:0)
正如其他一些人简要提到的那样,由于您没有清除串行接口,因此多次致电Button
。
现在调用Delay
会发生什么,让我们说接口上有可用的信息,然后按预期调用Button
和break
,但由于您没有通过阅读可用信息来清除界面,因此在下次调用Button
时再次致电Delay
。
要解决此问题,您需要在致电Button
之前在if
函数或Button
语句中阅读串行接口中的信息。