【发布时间】:2018-06-13 16:54:01
【问题描述】:
我正在尝试在 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()。
【问题讨论】:
-
从串行接口读取字节,这样下次它就不再存在了。
-
你的break和这里的if语句有关。所以它只是退出 if。
-
@BenjaminBarrois 是的,我使用 loop() 而不是 break 不起作用。
-
我想你误解了我的意思。您的
break退出if上下文而不是for上下文(上下文是相应括号{...}内的内容)。 HeheBoi给出的解决方案让你退出for上下文,这正是你想要的。 -
@BenjaminBarrois 这是错误的。 Break 会按照他的意愿打破 for 循环,问题不在于。