如何清除Arduino中串行接口的字节数?
How to clear the bytes of Serial interface in an Arduino?
我正在尝试中断串行监视器以执行某个功能,并在中断功能完成后继续执行上一个功能,我的代码如下
#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
相关文章:
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 基于字节数组生成静态范围整数值
- 将字节数组转换为带有字节序问题的指针
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 字节数组初始化会导致 DirectX 崩溃
- 使用 swig 追加到字节数组
- C++ 替换字节数组中项的顺序
- QDataStream 读取和写入的字节数比 QFile::length() 报告要多
- 如何从保存在 Java 中C++的字节数组中读取数字?
- 如何在C++(Arduino)中将浮点数组转换为字节数组
- 将字节数组转换为多维数组
- 为什么 sizeof 在 C++ 中给出不正确的字节数?
- 如何将带有空字符的字节数组馈送到 std::iostream 中?
- C++字节数组到整数
- 将字符串转换为无符号字符数组/字节数组
- 用于 progmem 的C++和头文件压缩的 Web 文件字节数组
- mmap 中的长度是字节数还是页数?
- 如果我向一个12字节的缓冲区写入的字节数少于12,会发生什么情况
- 从 UTF-8 字节数组创建字符串?
- 如何清除Arduino中串行接口的字节数?