我正在尝试中断串行监视器以执行某个功能,并在中断功能完成后继续执行上一个功能,我的代码如下
#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((。 我尝试使用中断,但串行接口缓冲区未清除,因此它继续执行此功能,并且退出 if 循环,所以我尝试使用 return
void Delay(int sec) {
for(int i=0;i<sec;i++){
if (Serial.available())
{
Button();
return;
}
delay(1);
}
}
the same thing happens
该函数没有退出它不断重复相同的内容,因为串行接口没有从之前的遭遇中清除,我本可以在 void loop(( 中使用 serial.available,但是每当 Arduino 处于延迟函数时,它就会休眠,所以它不会读取串行断路器,所以我创建了单独的 Delay(( 那么我如何更改代码以结束此功能并返回 Light((
但串行接口缓冲区未清除
然后你必须清除它:
while (Serial.available())
Serial.read(); // remove 1 character