如何清除Arduino中串行接口的字节数?

How to clear the bytes of Serial interface in an Arduino?

本文关键字:接口 字节数 Arduino 何清除 清除      更新时间:2023-10-16

我正在尝试中断串行监视器以执行某个功能,并在中断功能完成后继续执行上一个功能,我的代码如下

#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