Arduino 串口 不能完全接受 命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino 串口 不能完全接受 命令相关的知识,希望对你有一定的参考价值。
void setup()
pinMode(8,HIGH);
Serial.begin(9600);
void loop()
if(Serial.read()=='k')
digitalWrite(8,HIGH);
else if(Serial.read()=='g')
digitalWrite(8,LOW);
这是我写的程序,我想控制LED的开关,但是有的时候发送k或g的时候小灯没有反应,得的多发送几遍,我不知道有什么问题,望大侠赐教。
是 分少么?怎么 没人回答呀 小弟就这些分了
所以,要先判断有没有数据传输过来,再进行判断。
另外,Serial.Read()使用过后,所有已经被接收的数据就会被清空!
举例:就拿你的程序来说,如果说你现在的程序加上了判断有数据的语句,然后你输了个'g'
那么,第一个if判断进行:Serial.Read()此时是g,不等于k。跳过,
但是,此时缓存中的g已经被清除了,也就是说:
第二个if判断进行:Serial.Read()的值是空,不等于g,也跳过。因此会失效
解决办法就是新建一个变量保存结果。
##PS:pinMode(pin,mode); mode是INPUT(数字输入)或OUTPUT(数字、模拟输出)
程序:
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);
##PS:Serial.available()命令用于判断串口是否有数据,有就返回可以读取的字节的数目,没有就是0,通常用if(Serial.available()>0)判断。
官网解释: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. 参考技术A 很简单,你应该为你的串口读取的数值给一个缓存区,说的直白一点,就是把串口收到的数据放到一个变量里面,比较的时候拿变量里面的数值去比 参考技术B 你需要先判断一下串口有没有有效的数据,这个很重要 给你一个测试代码 如果有问题可以问我
void setup()
pinMode(13,OUTPUT);
pinMode(13,HIGH);
Serial.begin(9600);
void loop()
if(Serial.available()>0)
char c= char(Serial.read());
if(c=='k')
digitalWrite(13,HIGH);
Serial.println("k");
else if(c=='g')
digitalWrite(13,LOW);
Serial.println("g");
STM32 串口为啥只能接收发送的部分数据
程序BUG,或者接受缓冲的数组变量满了,不过基本上可以确定是程序问题 参考技术A 这个跟stm32没有关系,跟你的程序有关系。以上是关于Arduino 串口 不能完全接受 命令的主要内容,如果未能解决你的问题,请参考以下文章
STM32F103VET6基于Arduino开发框架下FreeRTOS串口1不能正常工作解决方案