‘壹’ 应用串口控制开关灯,要求通过计算机发送串口指令来实现开关arino上的L灯,使用应用串口控制开
摘要 您好,很高兴为您解答程序的编制是int ledPin=13;
‘贰’ arino的串口能不能即读又写
Arino的串口是由两个IO口操作,是可以同时作写及读的墽作,但在接收方面,受限于机械周期(machine cycle)的影响,波特率(baud rate)的设定太高,如超过115200以上,怕会有失接收(missed reception)的机率。这又视烧录在Arino的程式是怎样执行,若有中止函数(interrupt function),而其中执行命令比较多,那失接收的机率訧更大了。
‘叁’ Arino怎么串口显示字符
先用Serial.begin()打开串口,再用Serial.write()和Serial.writeln()写字符。
‘肆’ arino怎么从串口读取字符
首先是串口的读入:
基本的串口读入:
void setup()
{
Serial.begin(9600); //设置波特率为9600,一般是这个波特率
}
void loop()
{
if(Serial.available()>0)//如果串口有数据进入的话
{
char c=Serial.read();//每次读一个字符,是ASCII码的
}
}
然后就是相当于读入信息的处理了
比如说如果建一个字符串name,每读一次c若不是等号或空格就加进去,
当读到等号时就读完一个名字了,接下来一直读到空格的都是数据,
当读到空格后就完成一个循环,继续上面的循环这样
‘伍’ arino 读取串口数值 ~
1、首先设置LED灯引脚,定义变量存储串口数据,如图所示。
‘陆’ 关于Arino 关于串口通信
首先你写的逻辑有问题
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() 一次只能读一个出来的,另外的要留到下次判断
这个虽然回答不了你的问题,但是是一个明显的错误
‘柒’ Arino 串口 不能完全接受 命令
你所说的多发几次就有反应的状况其实是你运气好,因为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.
‘捌’ arino接收串口屏指令
首先根据按键对应的口线进行按键状态扫描,加入按键消抖程序,确认按键后,执行开灯/关灯程序执行。然后执行对应报文的发送即可。