
想用arduino同时与2个串口设备通讯,怎么办
如果是arduino uno这样的单硬件串口的板子,除了主串口外还可以软件模拟一个串口,具体写法看reference。
如果是mega2560这样的4个硬件串口的板子,分别用Serial1.XXX,Serial2.XXX这些来初始化和输出。
连接时注意电平。
除了主串口自带了USB转串口外其余都是TTL电平。
arduino的串口能不能即读又写
删除驱动重新插一下,让你指定驱动位置,那么:x:\\\\Program Files\\\\Arduino\\\\drivers,里个Old_Arduino_Drivers的包,把它解压,指定到X:\\\\Program Files (x86)\\\\Arduino\\\\drivers\\\\Old_Arduino_Drivers,OK了。
(注:X是你的arduino IDE 安装盘符)还不行的话,你可能要重新烧一下bootloader了。
关于Arduino 关于串口通信
首先你写的逻辑有问题while(Serial.available()>0)比如,这里我输入了1 { if (sum<3) sum小于3时存入a {insum=Serial.read(); a[sum]=insum; sum=sum+1; } \\\/\\\/insum读取出来是1了 if (sum>2) sum大于2时存入b {insum=Serial.read(); b[3-sum]=insum; sum=sum+1;}\\\/\\\/这里又读了一次
就是说 Serial.available() 一次只能读一个出来的,另外的要留到下次判断这个虽然回答不了你的问题,但是是一个明显的错误
Arduino 串口 不能完全接受 命令
你所说的多发几次就有反应的状况其实是你运气好,因为loop是一直循环的,所以里面的代码一遍遍一行行往下运行,比如你正好在运行Serial.Read()命令前传送了,那就可以进行判断。
所以,要先判断有没有数据传输过来,再进行判断。
另外,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.



