《Arduino技术及应用》ppt课件—第13章-硬件串口通信.ppt

上传人:飞****2 文档编号:73177781 上传时间:2023-02-16 格式:PPT 页数:31 大小:3MB
返回 下载 相关 举报
《Arduino技术及应用》ppt课件—第13章-硬件串口通信.ppt_第1页
第1页 / 共31页
《Arduino技术及应用》ppt课件—第13章-硬件串口通信.ppt_第2页
第2页 / 共31页
点击查看更多>>
资源描述

《《Arduino技术及应用》ppt课件—第13章-硬件串口通信.ppt》由会员分享,可在线阅读,更多相关《《Arduino技术及应用》ppt课件—第13章-硬件串口通信.ppt(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、ArduinoArduino技术及应用技术及应用第第13章章 硬件串口通信硬件串口通信目录目录13.1 HardwareSerial类库成员函数13.2 print()和write()输出方式的差异13.3 read()和peek()输入方式的差异13.4 串口读取字符串13.5 串口事件13.6 更好的串口监视器串口调试助手213.1 HardwareSerial类库成员函数类库成员函数HardwareSerial类位于Arduino核心库中,Arduino默认包含了该类,因此可以不再使用include语句进行调用。其成员函数如下:1.available()l功能:获取串口接收到的数据个数,

2、即获取串口接收缓冲区中的字节数。接收缓冲区最多可保存64B的数据。l语法:Serial.available()l参数:无l返回值:可读取的字节数。313.1 HardwareSerial类库成员函数类库成员函数2.begin()l功能:初始化串口。该函数可配置串口的各项参数。l语法:Serial.begin(speed)l参数:speed,波特率l返回值:无3.end()l功能:结束串口通信。该操作可以释放该串口所在的数字引脚,使其作为普通数字引脚使用。l语法:Serial.end()l参数:无。l返回值:无。413.1 HardwareSerial类库成员函数类库成员函数4.find()l功

3、能:从串口缓冲区读取数据,直至读到指定的字符串。l语法:Serial.find(target)l参数:target,需要搜索的字符串或字符。l返回值:boolean型值,为true表示找到,为false表示没有找到。55.findUntil()l功能:从串口缓冲区读取数据,直至读到指定的字符串或指定的停止符。l语法:Serial.findUntil(target,terminal)l参数:target,需要搜索的字符串或字符。terminal,停止符。l返回值:无。13.1 HardwareSerial类库成员函数类库成员函数6.flush()l功能:等待正在发送的数据发送完成。需要注意的是,

4、在早期的Arduino版本中(1.0之前),该函数用做清空接收缓冲区。l语法:Serial.flush()l参数:无。l返回值:无。613.1 HardwareSerial类库成员函数类库成员函数7.parseFloat()l功能:从串口缓冲区返回第一个有效的float型数据。l语法:Serial.parseFloat()l参数:无。l返回值:float型数据。8.parseInt()l功能:从串口流中査找第一个有效的整型数据。l语法:Serial.parseInt()l参数:无。l返回值:int型数据。713.1 HardwareSerial类库成员函数类库成员函数9.peek()l功能:返

5、回1字节的数据,但不会从接收缓冲区删除该数据。与read()函数不同,read()函数读取数据后,会从接收缓冲区删除该数据。l语法:Serial.peek()l参数:无。l返回值:进人接收缓冲区的第1字节的数据;如果没有可读数据,则返回-1。813.1 HardwareSerial类库成员函数类库成员函数10.print()l功能:将数据输出到串口。数据会以ASCII码形式输出。如果想以字节形式输出数据,则需要使用write()函数。l语法:Serial.print(val)Serial.print(val,format)l参数:val,需要输出的数据。format,分两种情况:913.1 H

6、ardwareSerial类库成员函数类库成员函数 输出的进制形式,包括: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;l返回值:输出的字节数。1013.1 HardwareSerial类库成员函数类库成员函数11.println()l功能:将数据输出到串口,并回车

7、换行。数据会以ASCII码形式输出。l语法:Serial.println(val)Serial.println(val,format)l参数:val,需要输出的数据。format,分两种情况:1113.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.2

8、3;Serial.Println(l.23456,4)输出为1.2346;l返回值:输出的字节数。1213.1 HardwareSerial类库成员函数类库成员函数12.read()l则返回-1。功能:从串口读取数据。与peek()函数不同,read()函数每读取1字节,就会从接收缓冲区移除1字节的数据。l语法:Serial.read()l参数:无。l返回值:进入串口缓冲区的第1个字节;如果没有可读数据,1313.1 HardwareSerial类库成员函数类库成员函数13.readBytes()l功能:从接收缓冲区读取指定长度的字符,并将其存人一个数组中。若等待数据时间超过设定的超时时间,则

9、退出该函数。l语法:Serial.readBytes(buffer,length)l参数:buffer,用于存储数据的数组(char 或者byte)。length,需要读取的字符长度。l返回值:读到的字节数;如果没有找到有效的数据,则返回0。1413.1 HardwareSerial类库成员函数类库成员函数14.readBytesUntil()l功能:从接收缓冲区读取指定长度的字符,并将其存人一个数组中。如果读到停止符,或者等待数据时间超过设定的超时时间,则退出该函数。l语法:Serial.readBytesUntil(character,buffer,length)l参数:character

10、,停止符。Buffer,用于存储数据的数组(char 或者byte)。length,需要读取的字符长度。l返回值:读到的字节数;如果没有找到有效的数据,则返回0。1513.1 HardwareSerial类库成员函数类库成员函数15.setTimeout()l功能:设置超时时间。用于设置Serial.readBytesUntil()函数和Serial,read-Bytes()函数的等待串口数据时间。l语法:Serial.setTimeout(time)l参数:time,超时时间,单位为毫秒。l返回值:无。1613.1 HardwareSerial类库成员函数类库成员函数16.write()l功

11、能:输出数据到串口。以字节形式输出到串口。l语法:Serial.write(val)Serial.write(str)Serial.write(buf,len)l参数:val,发送的数据。str,String型的数据。buf,数组型的数据。len,缓冲区的长度。l返回值:输出的字节数。1713.2 print()和和write()输出方式的差异输出方式的差异v在HardwareSerial类中有print()和write()两种输出函数,两者都可以输出数据,但输出形式并不相同。可以使用示例程序来比较两者的差别。v运行书中所给程序,打开串口监视器,输出结果如图所示。1813.2 print()和

12、和write()输出方式的差异输出方式的差异 当使用print()发送一个数据时,Arduino发送的并不是数据本身,而是将数据转换为字符,再将字符对应的ASCII码发送出去,串口监视器收到ASCII码,则会显示对应的字符。因此使用print()函数是以ASCII码形式输出数据到串口。而当使用write()函数时,Arduino发送的是数值本身。但串口监视器接收到数据后,会将数值当做ASCII码而显示其对应的字符。1913.2 print()和和write()输出方式的差异输出方式的差异 因此,当使用Serial.Write(INT)输出一个整型数123时,显示出的字符为“”,因为 ASCII

13、码123对应的字符为“”;当使用Serial.write(BYTE,6)输出一个数组时,显示出来的是“012345”,因为数组48,49,50,51,52,53中的各元素是字符“0”、“1”、“2”、“3”、“4”、“5”对应的ASCII码,而串口监视器会自动将数据作为ASCII码,显示出对应的字符。2013.3 read()和和peek()输入方式的差异输入方式的差异串口接收到的数据都会暂时存放在接收缓冲区中,使用read()和peek()函数都是从接收缓冲区中读取数据。不同的是,当使用read()读取数据后,会将该数据从接收缓冲区中移除;而当使用peek()读取数据时,不会移除接收缓冲区中

14、的数据。2113.3 read()和和peek()输入方式的差异输入方式的差异使用read()读取数据的示例程序代码,下载以上程序,打开串口监视器,向Arduino发送“hello”,则会看到如图13-2所示的信息,串口依次输出了刚才发送的字符,输出完成后,串口便开始等待下一次输出。2213.3 read()和和peek()输入方式的差异输入方式的差异使用peek()读取数据的示例程序代码,下载以上程序,打开串口监视器,则可看到如图13-3所示的输出信息。Peek()函数在读取数据时,不会移除缓冲区中的数据,因此使用available()获得的缓冲区可读字节数不会改变,且每次读取时,都是当前缓

15、冲区的第1个字节。2313.4 串口读取字符串串口读取字符串当使用read()函数时,每次仅能读取1字节的数据,如果要读取一个字符串,则可使用“+=”运算将字符依次添加到字符串中。下载示例程序后,打开串口监视器,键入任意字符(图13-4),则会看到Arduino返回了刚才输入的数据。2413.4 串口读取字符串串口读取字符串以上程序中使用了延时语句delay(10),它在读取字符串时至关重要。可以尝试删除delay(10)后下载并运行修改后的程序,则可能会得到如图13-5所示的运行结果。这是由于Arduino程序运行速度很快,而当Arduino读完第一个字符,进人下一次while循环时,输人的

16、数据还没有完全传输进Arduino的串口缓冲区,串口还未接收到下一个字符,此时Serial.Available()的返回值就会为0,而Arduino是在第二次loop()循环中才检查到下一个字符,因此就输出了这样的错误结果。2513.5 串口事件串口事件在Arduino1.0版本中,新增加了serialEvent()事件,这是一个从Processing串口通信库中提取的函数。在Arduino中,serialEvent()并非真正意义上的事件,因此无法做到实时响应。但使用serialEvent()仍可改善程序结构,使程序脉络更为清晰。SerialEvent()事件的功能是:当串口接收缓冲区中有数

17、据时,会触发该事件。用法是:voidserialEvent()2613.5 串口事件串口事件对于Arduino MEGA控制器,还可以使用以下形式。void serialEventl()void serialEvent2()void serialEvent3()当定义了serialEvent()函数,便启用了该事件。当串口缓冲区中存在数据时,该函数便会运行。需要注意的是,这里的serialEvent()事件并不能立即做出响应,而仅仅是一个伪事件。当启用该事件时,其实是在两次Loop()循环之间检测串口缓冲区中是否有数据,如果有数据则调用serialEvent()2713.5 串口事件串口事件

18、可以在IDE中通过选择“文件”“示例”04.CommunicationSerialEvent菜单项找到程序。打开串口监视器,键入任意字符并发送,如图13-6所示,则可看到Arduino返回了刚才输人的字符。2813.6 更好的串口监视器更好的串口监视器串口调试助手串口调试助手Arduino IDE自带的串口监视器虽然简单易用,但只提供了基本的串口通信功能,而且能够修改的也只有波特率和结束符这两个设置,当需要完成一些高级的串口功能时,就不那么适合了。因此这里推荐一款串口助手软件Arduino串口助手(图13-7),使用它可以更好地调试Arduino的串口通信。从http:/ 本章小结本章小结本章主要讲硬件串口通信和HardwareSerial类库的使用。主要包含:HardwareSerial类库成员函数、print()和write()输出方式的差异、read()和peek()输入方式的差异、串口读取字符串、串口事件、串口调试助手等内容。30Thank You!31

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁