开启左侧

Arduino入门之串口(一)

[复制链接]
发表于 2016-10-21 23:46:22 | 显示全部楼层 |阅读模式
在平时的Arduino使用中,由于Arduino软件本身不支持单步的debug,这时候通过串口来监视程序运行的状态就尤为的重要。
Arduino本身简化了串口的使用方法,我们不多讨论。这里我们对几个常用的操作串口的代码进行逐一的分析。

1.Serial.begin()
    通俗的说,这句话是用来打开串口通讯并且设置其参数。一般来说,我们只需在里面添加自己需要的通讯波特率即可:300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200。以上是我们比较常用的(正常的)波特率,你也可以设置成不常用的类似1500, 5000这种都没有问题,但是PC端串口通讯软件波特率没法设置成这种,那样也是无法通讯的。波特率越高,传输的数据量也就越快越多,伴随而来的是长距离通讯丢包率也就越高(丢包率通俗的说就是数据不完整)。
    当然串口的设置不仅仅只是对于波特率的设定,其还可以设定串口的数据位,校验位和停止位。Arduino默认的是SERIAL_8N1,即8位数据位,无校验位,1位停止位。还有如下参数可供选择:SERIAL_5N1, SERIAL_6N1, SERIAL_7N1, SERIAL_8N1 (默认), SERIAL_5N2, SERIAL_6N2, SERIAL_7N2, SERIAL_8N2, SERIAL_5E1, SERIAL_6E1, SERIAL_7E1, SERIAL_8E1, SERIAL_5E2, SERIAL_6E2, SERIAL_7E2 ,SERIAL_8E2 ,SERIAL_5O1 , SERIAL_6O1, SERIAL_7O1, SERIAL_8O1, SERIAL_5O2, SERIAL_6O2, SERIAL_7O2, SERIAL_8O2。这里不参与讨论,详情可参考  http://blog.csdn.net/guomutian911/article/details/47044603

*需要注意的是,当你调用Serial.begin之后,请务必保证通讯设备之间的各个参数设置相同,否则会出现无法通讯的情况!如下图所示,当通讯波特率不同时出现乱码
串口测试1.png 串口测试2.png

2.Serial.available()
    这句话是用来判断串口缓存中是否有数据存在。串口工作的流程是先将收到的数据存到串口缓存中(这一步是我们使用的时候不用操作的,Arduino已经帮我们包含在程序中了)然后再由用户调取数据进行处理。
    当我们不加这句话的时候使用Serial.read读取数据,当没缓存没数据的时候就会读到-1.
串口测试3.png 串口测试4.png

3.Serial.read()
    这句话是用来读取串口缓存中的数据,其一次只能从串口缓存中读取一个数据出来。例如当我发送123时,他先读取1,然后读取2,然后读取3,而不是一次性把123读出来。这也是下图中为什么123三个数据是三行(println表示在打印的数据后加上\r\n即回车换行)。

若是一次读出来那打印的数据应是123\n\r。可是现在情况是1\n\r,2\n\r,3\n\r。即说明了一次是读出一个数据!

4.Serial.print()   Serial.println()
    这两句话都是把数据发送出去,区别在于一个是在同一行打印,另一个是换行打印。这里需要注意的是,print与println都是把数据转化成ASCII的形成发送出去。
串口测试5.png
如上图所示。当没有调用println时数据都是在同一行打印,当调用之后,下一个数据将在新行打印。

5.Serial.write()
    这句话是将数据发送出去,与print的区别是该函数发送的时候不会将数据转化成ASCII,而是将其本身发送出去。这里需要注意的一点是,Arduino串口监视器本身显示的ASCII,我们看到的1其实ASCII的1,即是字符1,而不是整型的1
串口测试6.png
由上图中发现,当我调用write(1)的时候,并无法显示出来,当我调用write(49)时显示了1(字符1转换成整型即是49,这是ASCII)。
通过这个方式可能不好对wirte和print进行区别,我将在下期教程中通过两个Arduino通讯的实例进行解析
回复

使用道具 举报

发表于 2016-10-24 11:41:27 | 显示全部楼层
学习了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精彩课程推荐

关于我们

帮助中心

商务合作

点击这里给我发消息

关注微信公众号

Copyright © 2016-2017 i创学院 - 上海享渔教育科技有限公司 Powered by Discuz!     ( 沪ICP备16033954号-1 )