最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

Arduino 串口 不能完全接受 命令

来源:懂视网 责编:小OO 时间:2024-12-01 01:08:59
文档

Arduino 串口 不能完全接受 命令

值得注意的是,使用Serial.Read()后,所有已接收的数据会被清空。例如,假设你的程序中加入了判断有数据的语句,然后你输入了';g';,第一个if判断会进行:Serial.Read()此时是g,不等于k,跳过。但是,此时缓存中的g已经被清除了,因此,第二个if判断进行:Serial.Read()的值是空,不等于g,也跳过。因此会失效。解决办法是使用一个变量来保存结果。例如,可以创建一个char变量temp来保存从Serial.read()获取的数据。这样,即使Serial.Read()清空了缓存,temp仍能保存上一次读取的数据。示例程序如下:void setup()。{;pinMode(13,OUTPUT);//使13口成为输出口。};void loop()。{;
推荐度:
导读值得注意的是,使用Serial.Read()后,所有已接收的数据会被清空。例如,假设你的程序中加入了判断有数据的语句,然后你输入了';g';,第一个if判断会进行:Serial.Read()此时是g,不等于k,跳过。但是,此时缓存中的g已经被清除了,因此,第二个if判断进行:Serial.Read()的值是空,不等于g,也跳过。因此会失效。解决办法是使用一个变量来保存结果。例如,可以创建一个char变量temp来保存从Serial.read()获取的数据。这样,即使Serial.Read()清空了缓存,temp仍能保存上一次读取的数据。示例程序如下:void setup()。{;pinMode(13,OUTPUT);//使13口成为输出口。};void loop()。{;

你可能会遇到一个状况,即多次发送命令才有反应,这是因为程序在不断循环运行,所以每次循环都会执行代码。如果你恰好在运行Serial.Read()之前发送了数据,那么就可以进行判断。因此,要先判断是否有数据传输过来,再进行后续操作。

值得注意的是,使用Serial.Read()后,所有已接收的数据会被清空。例如,假设你的程序中加入了判断有数据的语句,然后你输入了'g',第一个if判断会进行:Serial.Read()此时是g,不等于k,跳过。但是,此时缓存中的g已经被清除了,因此,第二个if判断进行:Serial.Read()的值是空,不等于g,也跳过。因此会失效。

解决办法是使用一个变量来保存结果。例如,可以创建一个char变量temp来保存从Serial.read()获取的数据。这样,即使Serial.Read()清空了缓存,temp仍能保存上一次读取的数据。

示例程序如下:

void setup()

{
pinMode(13,OUTPUT); //使13口成为输出口
Serial.begin(9600);
}

void loop()

{
while(Serial.available()<=0); //这里是一个死循环,如果没有数据就一直什么都不干,如果有数据,就跳出循环(下面就是判断)
char temp=char(Serial.read()); //保存数据(char(),转换为字符)
if(temp=='k'){
digitalWrite(13,HIGH);
}
else if(temp=='g'){
digitalWrite(13,LOW);
}
}

需要注意的是,Serial.available()命令用于判断串口是否有数据,有就返回可以读取的字节的数目,没有就是0,通常用if(Serial.available()>0)进行判断。

总结来说,为了确保数据不会被清空,可以使用一个变量来保存从Serial.read()获取的数据,从而避免数据丢失。

官网解释:Get the number of bytes (characters) available for reading from the serial port. This is data that's already arrived and stored in the serial receive buffer (which holds 64 bytes). available() inherits from the Stream utility class.

通过这种方式,你可以确保每次读取的数据不会被清空,并且能够正确地进行判断和操作。

文档

Arduino 串口 不能完全接受 命令

值得注意的是,使用Serial.Read()后,所有已接收的数据会被清空。例如,假设你的程序中加入了判断有数据的语句,然后你输入了';g';,第一个if判断会进行:Serial.Read()此时是g,不等于k,跳过。但是,此时缓存中的g已经被清除了,因此,第二个if判断进行:Serial.Read()的值是空,不等于g,也跳过。因此会失效。解决办法是使用一个变量来保存结果。例如,可以创建一个char变量temp来保存从Serial.read()获取的数据。这样,即使Serial.Read()清空了缓存,temp仍能保存上一次读取的数据。示例程序如下:void setup()。{;pinMode(13,OUTPUT);//使13口成为输出口。};void loop()。{;
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top