风筝
发表于: 2018-10-4 12:01:17 | 显示全部楼层

本篇文章主要描述了如何在两个Arduino开发板之间交换数据。

uart-example.jpg


对于数据源,我们将使用连接到第一个Arduino开发板的两个电位器。我们将数据序列化为格式化文本行,并通过UART将它们发送到第二个Arduino开发板。第二个Arduino开发板将使用获得的数据控制两个LED的亮度。


所需的硬件

●  2个Arduino Uno开发板

●  2个LED指示灯

●  2×220Ω电阻

●  2×10kΩ电位器

●  2个面包板

●  连接导线


电路板

arduino-pots.jpg

第一步是为Arduino开发板制作发送数据的电路。将两个电位器连接到Arduino开发板上的A0和A1模拟端口。

arduino-pots.fz.png


接收电路板

arduino-leds.jpg

第二步是为接收数据的Arduino开发板搭建电路。通过220欧姆电阻将两个LED连接到Arduino开发板上的D4和D6数字端口。

注意:要控制亮度,两个LED指示灯应连接到支持PWM的端口。

arduino-leds.fz.png


连接Arduino开发板

第三步是在Arduino开发板之间创建UART连接。所有Arduino开发板都至少有一个UART接口,也称为硬件串口或只是“串行”。


要通信串行接口使用两个名为TX和RX的引脚。 TX和RX分别是发送和接收的缩写。


例如,Arduino Uno在数字引脚D0(RX)和D1(TX)上有一个串行接口。在Uno上,此端口还用于通过USB与计算机通信。反过来,Arduino Mega还有三个额外的UART接口:

●  引脚D19(RX)和D18(TX)上的Serial1

●  引脚D17(RX)和D16(TX)上的Serial2

●  引脚D15(RX)和D14(TX)上的Serial3


如果硬件串行接口不足,可以通过编程方式在任何Arduino数字引脚上模拟UART接口。这种技术称为bit-banging,这种接口称为软件序列。

uart-bus.fz.png


在本教程中,只有一个UART接口的Arduino Uno开发板很忙,因为我们使用它来加载固件并与计算机通信。那么,让我们创建一个新的软件序列。


在两个Arduino板上定义数字引脚TX和RX。让D8 Arduino引脚为RX,D9 Arduino引脚为TX。


要使用UART总线链接两个器件,第一个器件的TX引脚应连接到第二个器件的RX引脚,而第二个器件的TX引脚应连接到第一个器件的RX引脚。这可以通过重叠导线在物理上完成。


将第一块Arduino板上的D9引脚与第二块Arduino板上的D8引脚和第一块板上的D8引脚连接在第二块Arduino板上。


所有信号都需要参考电压。 GND为单端信号提供此参考,例如UART使用的信号。因此,应该加入两块板上的地面。


将第一块Arduino板上的GND引脚与第二块板上的GND引脚相连。


编程

在XOD中创建一个新项目,并将其命名为uart-led-control。我们将创建两个XOD补丁 - 每个补丁一个。为连接电位器的电位器创建一个新的补丁并命名它。


注意:对于这个项目,一些节点包含在库gabbapeople / uart-led-control中。务必将其添加到工作区中。该库中的节点很快将包含在XOD标准库中


采集数据值

让我们从电位计中收集值,并为以后的序列化做好准备。

pots.step1.patch.png


●  在补丁上添加两个pot节点。它们对应于面包板上的几个电位计。为避免混淆,请以不同方式标记它们。例如,锅A和锅B.

●  设置pot节点的PORT引脚。当我们将它们连接到A0和A1时,我们将PORT引脚值设置为A0和A1。

●  锅节点输出0到1范围内的信号值。电位计是模拟电子元件。即使您没有触摸电位器旋钮,电位器输出值也可以连续变化,例如从0.855到0.856并返回。为了摆脱这些微小的变化,让我们将电位器输出四舍五入到点后两位小数。

●  在补丁上添加两个圆形分数节点,并将它们与pot节点链接。要在点后设置两个小数位,请将2值放在DIG引脚上。


汇编数据

在本指南中,我们使用CSV(逗号分隔值)基于文本的格式来形成包含我们传输的数据的字符串行。每行是由逗号分隔的两个信号值的字符串,用逗号分隔。


以下是字符串的示例:0.25,0.95。

pots.step2.patch.png


要将所有数据值组合到单个字符串,请使用join节点。

●  将连接放在补丁上。

●  将D引脚的分隔符值设置为

●  将join节点与两个round-fraction节点链接。


发送数据

让我们在pots程序中定义软件串行接口,并描述数据的传输方式。

pots.step3.patch.png


●  要设置软件串行接口,请将xod / uart库中的soft-uart节点放到补丁上。设置RX和TX引脚值。我们将D8值设置为RX引脚,将D9值设置为TX。

●  BAUD引脚设置串行通信的数据速率,以每秒位数(波特)为单位。这些波特率值是标准化的。对于软件串行接口,最大波特率值为115200.请注意,波特值越高,数据在传输过程中丢失或损坏的可能性就越大。我们将BAUD值设置为19200。

●  将xod / uart库中的打印节点添加到修补程序中。此节点通过使用回车符\ r \ n和换行符\ n字节文字添加两个字节,将DATA引脚中的字符串值转换为单行。每次脉冲信号出现在SEND引脚上时,此打印通过UART发送线路。

●  将DATA引脚与连接节点链接。

●  将打印节点的UART引脚与soft-uart节点相链接。


以下是要发送的行的示例:0.25,0.95 \ r \ n。


限制频率

pots补丁的最后一步是限制发送频率。只有当电位计值发生变化时,我们才会发送新的一行数据。


我们还将使用throttle节点来减慢脉冲频率。在转弯期间,电位器产生许多新值并且脉冲率很高。期望限制脉冲频率,使得每条线具有完整性发送的时间。

pots.patch.png


●  在补丁上添加两个pulse-on-change节点,并将它们与圆形分数节点链接。

●  将任何节点放在补丁上,并将其输入与更换脉冲节点链接。现在,如果电位计值发生变化,任何和脉冲变化节点都会产生脉冲。

●  将节流节点添加到补丁上,并将其放在任何打印节点之间。节流阀每T秒传递一次脉冲不超过一次。为了减慢频率,我们将0.05秒的值放在T引脚上。

●  第一个Arduino开发板的补丁已经完成。上传,使用终端仿真器观察结果。让我们做下一个补丁。


接收数据

带有LED的Arduino开发板的程序从接收来自UART的数据开始。为LED连接板创建一个新的补丁并命名为LED。

leds.step1.patch.png


●  要设置软件串行接口,请将xod / uart库中的soft-uart节点放到补丁上。设置RX和TX引脚值。我们将D8值设置为RX引脚,将D9值设置为TX。

●  Arduino板必须以相同的速度通信。 BAUD引脚值与上一个补丁相同。将19200值放入BAUD引脚。

●  将读取线添加到补丁上。该节点侦听UART接口以获取字节流。如果它可用,则读取行节点搜索其中的\ n字节文字,并将\ n之前的所有字符转储到单行。它还会从输出中剪切\ r \ n字节文字。 READ引脚触发新的线读。

●  将读取线节点的UART引脚与soft-uart节点相链接,并将READ值设置为Continuously。


解析数据

当收到一行时,必须对其进行解析。我们将使用parse-tabular节点将序列化的CSV行解析为两个数字。

leds.step2.patch.png


●  在补丁上添加两个解析表格节点。每个LED一个节点。 parse-tabular节点与join相反。它使用D作为分隔符将字符串STR分割为标记,并在索引IDX处输出标记。 IDX编号从0开始。例如,对于行ABCD,1234,带有分隔符的EFGH,带有0编号的部分是ABCD,带有1编号的部分是1234,带有2编号的部分是EFGH 。

●  将parse-tabular节点的STR引脚与读取线节点的LINE引脚相链接。

●  在D引脚处设置分隔符。将其指定为单引号中的字符。

●  将第一个parse-tabular节点的IDX值设置为0以读取Pot A值。

●  将第二个parse-tabular节点的IDX值设置为1以读取Pot B值。


控制LED

要完成LED部分,仍然需要将线路部件发送到LED。

leds.patch.png


●  将两个parse-number节点从uart-example库中放入补丁,并将它们与parse-tabular节点链接起来。 parse-number节点将String类型的值转换为Number。

●  添加到每个电位器的LED节点。您可以将它们命名为LED A和LED B作为电位器。当我们将LED连接到Arduino板上的D3和D6引脚时,我们将D3和D6值放入LED节点的PORT引脚。

●  将parse-number输出与led节点的LUM引脚相链接。


两个补丁都已完成,您可以将它们上传到他们的主板上。


结论

如果您在尝试重复本教程时遇到问题,请下载准备好的项目: uart-led-control.rar (5.38 KB, 下载次数: 28)

,然后在IDE中打开它。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-26 20:08 , Processed in 0.047424 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表