资源描述
,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,Arduino,技术及应用,第,13,章 硬件串口通信,Arduino技术及应用第13章 硬件串口通信,目录,13.1 HardwareSerial,类库成员函数,13.2 print(),和,write(),输出方式的差异,13.3 read(),和,peek(),输入方式的差异,13.4,串口读取字符串,13.5,串口事件,13.6,更好的串口监视器,串口调试助手,2,目录13.1 HardwareSerial类库成员函数13.,13.1 HardwareSerial,类库成员函数,HardwareSerial,类位于,Arduino,核心库中,,Arduino,默认包含了该类,因此可以不再使用,include,语句进行调用。其成员函数如下:,1.available(),功能:获取串口接收到的数据个数,即获取串口接收缓冲区中的字节数。接收缓冲区最多可保存,64B,的数据。,语法:,Serial.available(),参数:无,返回值:可读取的字节数。,3,13.1 HardwareSerial类库成员函数Hardw,13.1 HardwareSerial,类库成员函数,2.begin(),功能:初始化串口。该函数可配置串口的各项参数。,语法:,Serial.begin(speed),参数:,speed,,波特率,返回值:无,3.end(),功能:结束串口通信。该操作可以释放该串口所在的数字引脚,使其作为普通数字引脚使用。,语法:,Serial.end(),参数:无。,返回值:无。,4,13.1 HardwareSerial类库成员函数2.be,13.1 HardwareSerial,类库成员函数,4.find(),功能:从串口缓冲区读取数据,直至读到指定的字符串。,语法:,Serial.find(target),参数:,target,,需要搜索的字符串或字符。,返回值:,boolean,型值,为,true,表示找到,为,false,表示没有找到。,5,5.findUntil(),功能:从串口缓冲区读取数据,直至读到指定的字符串或指定的停止符。,语法:,Serial.findUntil(target,terminal),参数:,target,,需要搜索的字符串或字符。,terminal,,停止符。,返回值:无。,13.1 HardwareSerial类库成员函数4.fi,13.1 HardwareSerial,类库成员函数,6.flush(),功能:等待正在发送的数据发送完成。需要注意的是,在早期的,Arduino,版本中(,1.0,之前),该函数用做清空接收缓冲区。,语法:,Serial.flush(),参数:无。,返回值:无。,6,13.1 HardwareSerial类库成员函数6.flu,13.1 HardwareSerial,类库成员函数,7.parseFloat(),功能:从串口缓冲区返回第一个有效的,float,型数据。,语法:,Serial.parseFloat(),参数:无。,返回值:,float,型数据。,8.parseInt(),功能:从串口流中査找第一个有效的整型数据。,语法:,Serial.parseInt(),参数:无。,返回值:,int,型数据。,7,13.1 HardwareSerial类库成员函数7.pa,13.1 HardwareSerial,类库成员函数,9.peek(),功能:返回,1,字节的数据,但不会从接收缓冲区删除该数据。,与,read(),函数不同,,read(),函数读取数据后,会从接收缓冲区删除该数据。,语法:,Serial.peek(),参数:无。,返回值:进人接收缓冲区的第,1,字节的数据;如果没有可读数据,则返回,-1,。,8,13.1 HardwareSerial类库成员函数9.pe,13.1 HardwareSerial,类库成员函数,10.print(),功能:将数据输出到串口。数据会以,ASCII,码形式输出。如果想以字节形式输出数据,则需要使用,write(),函数。,语法:,Serial.print(val),Serial.print(val,format),参数:,val,,需要输出的数据。,format,,分两种情况:,9,13.1 HardwareSerial类库成员函数10.p,13.1 HardwareSerial,类库成员函数,输出的进制形式,包括:,BIN(,二进制);,DEC(,十进制);,OCT(,八进制);,HEX(,十六进制,),。,指定输出的,float,型数据带有小数的位数(默认输出,2,位),例如:,Serial.Print(l.23456),输出为,1.23,;,Serial.Print(l.23456,0),输出为,1,;,Serial.Print(l.23456,2),输出为,1.23,;,Serial.Print(l.23456,4),输出为,1.2346,;,返回值:输出的字节数。,10,13.1 HardwareSerial类库成员函数 输出的,13.1 HardwareSerial,类库成员函数,11.println(),功能:将数据输出到串口,并回车换行。数据会以,ASCII,码形式输出。,语法:,Serial.println(val),Serial.println(val,format),参数:,val,,需要输出的数据。,format,,分两种情况:,11,13.1 HardwareSerial类库成员函数11.p,13.1 HardwareSerial,类库成员函数,输出的进制形式,包括:,BIN(,二进制);,DEC(,十进制);,OCT(,八进制);,HEX(,十六进制,),指定输出的,float,型数据带有小数的位数,(,默认输出,2,位),例如:,Serial.println(1.23456),输出为,1.23,;,Serial.println(1.23456,0),输出为,1,;,Serial.println(1.23456,2),输出为,1.23,;,Serial.Println(l.23456,4),输出为,1.2346,;,返回值:输出的字节数。,12,13.1 HardwareSerial类库成员函数输出的进制,13.1 HardwareSerial,类库成员函数,12.read(),则返回,-1,。功能:从串口读取数据。与,peek(),函数不同,,read(),函数每读取,1,字节,就会从接收缓冲区移除,1,字节的数据。,语法:,Serial.read(),参数:无。,返回值:进入串口缓冲区的第,1,个字节;如果没有可读数据,,13,13.1 HardwareSerial类库成员函数12.r,13.1 HardwareSerial,类库成员函数,13.readBytes(),功能:从接收缓冲区读取指定长度的字符,并将其存人一个数组中。若等待数据时间超过设定的超时时间,则退出该函数。,语法:,Serial.readBytes(buffer,length),参数:,buffer,,用于存储数据的数组(,char,或者,byte),。,length,,需要读取的字符长度。,返回值:读到的字节数;如果没有找到有效的数据,则返回,0,。,14,13.1 HardwareSerial类库成员函数13.r,13.1 HardwareSerial,类库成员函数,14.readBytesUntil(),功能:从接收缓冲区读取指定长度的字符,并将其存人一个数组中。如果读到停止符,或者等待数据时间超过设定的超时时间,则退出该函数。,语法:,Serial.readBytesUntil(character,buffer,length),参数:,character,,停止符。,Buffer,,用于存储数据的数组,(char,或者,byte),。,length,,需要读取的字符长度。,返回值:读到的字节数;如果没有找到有效的数据,则返回,0,。,15,13.1 HardwareSerial类库成员函数14.r,13.1 HardwareSerial,类库成员函数,15.setTimeout(),功能:设置超时时间。用于设置,Serial.readBytesUntil(),函数和,Serial,read-Bytes(),函数的等待串口数据时间。,语法:,Serial.setTimeout(time),参数:,time,,超时时间,单位为毫秒。,返回值:无。,16,13.1 HardwareSerial类库成员函数15.s,13.1 HardwareSerial,类库成员函数,16.write(),功能:输出数据到串口。以字节形式输出到串口。,语法:,Serial.write(val),Serial.write(str),Serial.write(buf,len),参数:,val,,发送的数据。,str,,,String,型的数据。,buf,,数组型的数据。,len,,缓冲区的长度。,返回值:输出的字节数。,17,13.1 HardwareSerial类库成员函数16.w,13.2 print(),和,write(),输出方式的差异,在,HardwareSerial,类中有,print(),和,write(),两种输出函数,两者都可以输出数据,但输出形式并不相同。可以使用示例程序来比较两者的差别。,运行书中所给程序,打开串口监视器,输出结果如图所示。,18,13.2 print()和write()输出方式的差异在,13.2 print(),和,write(),输出方式的差异,当使用,print(),发送一个数据时,,Arduino,发送的并不是数据本身,而是将数据转换为字符,再将字符对应的,ASCII,码发送出去,串口监视器收到,ASCII,码,则会显示对应的字符。因此使用,print(),函数是以,ASCII,码形式输出数据到串口。,而当使用,write(),函数时,,Arduino,发送的是数值本身。但串口监视器接收到数据后,会将数值当做,ASCII,码而显示其对应的字符。,19,13.2 print()和write()输出方式的差异,13.2 print(),和,write(),输出方式的差异,因此,当使用,Serial.Write(INT),输出一个整型数,123,时,显示出的字符为“,”,,因为,ASCII,码,123,对应的字符为“,”,;当使用,Serial.write(BYTE,,,6),输出一个数组时,显示出来的是“,012345”,,因为数组,48,,,49,,,50,,,51,,,52,,,53,中的各元素是字符“,0”,、“,1”,、“,2”
展开阅读全文