首页 » 通讯 » Arduino入门 第八节-串口通讯(根本篇)_年夜众_串口

Arduino入门 第八节-串口通讯(根本篇)_年夜众_串口

萌界大人物 2025-01-02 14:02:19 0

扫一扫用手机浏览

文章目录 [+]

发送数据

下面来看看第一个例程:串口发送字符串\公众Hello world!\公众到电脑。

Arduino入门 第八节-串口通讯(根本篇)_年夜众_串口 Arduino入门 第八节-串口通讯(根本篇)_年夜众_串口 通讯

在初始化函数中,实行了启动串口的函数,并且设置了串口的波特率为115200(即每秒传输115200个二进制位,把稳:进行串口通讯的设备波特率必须同等)。
在主循环中,不断地发送字符串\"大众Hello world!\"大众,每发送一次等待1秒。
下面是ArduinoIDE串口监视器吸收到的内容:

Arduino入门 第八节-串口通讯(根本篇)_年夜众_串口 Arduino入门 第八节-串口通讯(根本篇)_年夜众_串口 通讯
(图片来自网络侵删)

如果将输出函数改为Serial.println(),则在串口监视器中看到:

第二个例程,串口输出数字0-9,每个数字之间显示一个空格,每次输出数字9之后则换行,重新输出0-9。

串口监视器显示内容:

现在我们来思考一个问题,在上面例程中串口输出引用了变量\公众i\"大众的值,那么,电脑收到的是\公众i\"大众的真实值吗?比如当i=8时,电脑收到的是\"大众8\公众这个值吗?为了验证这个问题,我们将程序改一下,只输出0-2三个值,并且不加空格,不换行,然后换用串口调试助手来不雅观察收到的数据。

先用ArduinoIDE的串口监视器查看:

从监视器中看到,按预订的显示了\公众012\"大众,没有空格及换行,接着,看看串口调试助手\"大众十六进制显示\"大众得到的内容:

把稳上图中\"大众红框\公众位置,勾选了\"大众十六进制显示\"大众,如果不选这个选项则看到结果与ArduinoIDE串口监视器的一样。
从串口调试助手中我们看到,实际收到的是十六进制的\公众0x30,0x31,0x32\"大众,它们对应的十进制值应为\"大众48,49,50\公众,并不是其本身的值(十进制\公众0,1,2\"大众的十六进制值应为:0x00,0x01,0x02),这实际便是\"大众0,1,2\公众三个字符对应的ASCII码,也便是说Serial.print()及Serial.println()实际是将放入的变量及字符串以ASCII码的形式发送,这是由于在屏幕上显示一个值,如\"大众0\"大众,须要供应的是\"大众0\"大众对应的ASCII码,而如果将\"大众0\"大众的值发过去,显示的将不是零。
加下来,我们再改进一下程序,将Serial.print()换成Serial.write(),然后连续发送\"大众0,1,2\公众的实际值及\"大众0,1,2\公众对应的ASCII码\"大众0x30,0x31,0x32\公众,然后看看串口调试助手的显示内容。

串口调试助手十六进制显示:

关闭十六进制显示:

从上面的试验,我们可以看到,Serial.print()、Serial.println()与Serial.write()的差异,前两个是发送的ASCII码,而后面这个才是发送变量的值本身。
接下来,我们再改写程序,用Serial.write()实现输出\公众Hello world!\公众。

以上给出了两个例程,把稳Serial.write()的两种用法,下面是串口调试助手在\"大众十六进制显示\"大众关闭和开启两种状态下的显示结果:

下面附上从\"大众百度百科\"大众下载的ASCII码对照表,以供大家参考:

通过上面例程的学习,我们该当能够灵巧地节制Serial.print()、Serial.println()与Serial.write()的特点及用法。
Serial.println()输出时实际上是在Serial.print()的根本上增加了\"大众0x0d,0x0a\"大众的输出,或者也可以用Serial.print(\公众\r\n\公众)来实现回车换行,其余Serial.println()输出单变量时还可以用ArduinoIDE自带的\"大众串口绘图仪\"大众打印该变量的变革曲线。
而Serial.write()常用于串口双机或多机通讯,通报变量实际值用于掌握或打算时用,这一点是很主要的,比如某个传感器的实际丈量值要通过串口传输,则一样平常直接通报器实测值,而不是ASCII码,这个将在进阶课程的\公众串口双机+多机通讯中\公众中详细讲解。

吸收数据

上面我们学习了串口发送,现在来学习一下串口的吸收。
当串口发送数据时,数据是从TX引脚一位一位地发送出去的,而吸收数据时则是从RX引脚一位一位的吸收进来,每传输完成一个字节,就会做相应的处理,这个处理是在串口中断中进行,Arduino库的处理方法是在存储空间等分配了一个64字节的串口数据缓存空间(通过修正库文件可以修正缓存区大小),当吸收一个字节的数据后,就会把它存放到该存储空间中,下一个到来的字节数据跟在上一个字节的后面,当存储空间\"大众装满\"大众后,则最先收到的字节数据会被\公众挤出\公众,即知足\公众前辈先出\"大众的顺序,当我们读取数据时,也是按照这个顺序。

当吸收到数据后,我们可以通过函数Serial.available()查看缓存区内的字节数,然后用Serial.read()读取数据,要把稳的是这个函数一次只能读取一个字节,当吸收到多个字节数据时就要反复调用这个函数读取数据,其余:这个函数在读取一个字节后则该字节的数据便从缓存区中打消。
如果只读取,而不用除可以用Serial.peek()。
读取数据,我们可以用\"大众主动查询\"大众的方法,也可以利用\"大众触发事宜\"大众的方法。
主动查询即不管缓存区有没有数据,都在固定的时候去查看缓存区;而触发事宜办法则是当缓存区内有数据时,触发一个\"大众事宜\"大众,这个可以粗略地理解为一个中断,然后在一个处理函数中去读取数据,这个处理函数的函数名是固定的即:serialEvent()。
这个方法的优点在于我们不用每次都去查看缓存区,这样可以提高程序的效率。
下面我们以\"大众触发事宜\公众的办法来做一个试验,当串口吸收到到字符\公众k\公众时则打开板上13号引脚连接的LED,当收到字符\"大众g\"大众时则关闭该LED,如果收到其他字符则串口输出\公众Input error code!\"大众。

将上述代码下载到开拓板中,打开ArduinoIDE的串口监视器,在该界面的最上方输入字符k,点击\公众发送\"大众,则板上由13号引脚掌握的LED点亮;然后输入字符g并发送,则LED关闭;如果输入其他字符,则在监视器的吸收区显示\公众Input error code!\"大众。

上述代码在UNO、NANO、MEGA2560中都适用,而在MEGA2560板中,如果要利用其他串口,如串口1,则在基本的函名中\"大众Serial\"大众的后面加上串口编号即可,例如启动串口1:Serial1.begin(115200)(其编号为0-3,0省略不写),而相应的串口事宜函数名为:serialEvent1()。

其余,当串口与一些设备通讯,须要特定的数据位、停滞位、奇偶校验时,可以参考下表的值进行配置:

配置的方法如下,例如设置为数据位8,偶校验,两个停滞位:

Serial.begin(115200 , SERIAL_8E2);

在默认情形下,即缺省第二个参数时,串口事情于\公众SERIAL_8N1\"大众的模式下。

关于串口通讯的根本内容就讲到这里。
关于串口发送吸收的协议制订、多机通讯将在进阶课程中详细讲解。
欢迎关注、在评论区留言谈论。

标签:

相关文章

介绍中奖密码,数字背后的神秘力量

自古以来,人们便对中奖充满了向往。从彩票到抽奖,从游戏到比赛,中奖成为了无数人梦寐以求的事情。中奖并非完全靠运气,其中也蕴含着一定...

通讯 2025-01-04 阅读0 评论0

介绍“恶趣味”C语言,编程界的黑色幽默

在编程的世界里,总有一些人喜欢在严谨的逻辑和冰冷的代码中注入一丝黑色幽默,这种幽默被称为“恶趣味”。本文将以C语言为例,揭秘编程界...

通讯 2025-01-04 阅读0 评论0

介绍回复语言的魅力与艺术

随着互联网的普及,网络交流成为了人们日常生活中不可或缺的一部分。在众多交流方式中,评论回复语言以其独特的魅力和艺术价值,吸引了无数...

通讯 2025-01-04 阅读0 评论0

介绍快充协议,维修领域的革新之光

随着科技的发展,智能手机、平板电脑等便携式电子设备在日常生活中扮演着越来越重要的角色。为了满足用户对续航能力的需求,快充技术应运而...

通讯 2025-01-04 阅读0 评论0