FLProg-在信息环中组合Arduino板



从1.10.5版开始,FLProg程序允许您将多个Arduino开发板组合成环形UART网络。首先,请考虑这种情况。这些板根据标题图中所示的电路互连。假设板1通过UART发送一个数据包,其中包含板的标识符,变量以及变量的值。板2接受此数据包,如果不需要此变量中的数据,则仅进一步发送此数据包。如果根据程序,该变量的值对于控制器来说是必需的,则将数据包中的值复制到内部变量中,并且还将数据包沿环进一步发送。
这样,经过整个环的数据包返回发送它的板时,数据包传输将停止。
因此,来自包装的数据可用于连接到环网的任何板,并且任何板也可以是发送包装的发起者。

测试台的方案:



以下逻辑:
  • Arduino No. 1从传感器接收有关温度和湿度的数据。
  • Arduino 2号显示了DS18B20的温度。
  • Arduino No. 3显示DHT-22传感器的温度和湿度。

为了避免愤怒的评论,认为这种逻辑是不必要的而且是胡说八道,我将澄清这个项目纯粹是教育性的,旨在解释通过信息环进行数据传输的原理。为此,我们在工作逻辑上增加了一些废话。
  • DS18B20传感器的数字温度值捕获Arduino№3,然后将其转换为字符串并将其发送到环。该行捕获Arduino№2,并显示在显示屏上。
  • DHT-22传感器的数字温度值捕获Arduino№2,然后将其转换为字符串并将其发送到环。该行捕获Arduino№3,并显示在显示屏上。
  • DHT-22传感器的数字湿度值捕获了Arduino#3,然后将其转换为字符串并显示在显示屏上。

因此,让我们开始吧。
我们打开FLProg程序并为Arduino№1创建一个项目。在第一块板上,我们抛出了OneWire总线扫描单元(元素库,其他文件夹)。输入En的上升沿上的该块将扫描OneWire总线,并且当其上有传感器时,它将检测到的地址添加到关联的阵列。要参数化一个块,我们调用块编辑器(双击该块)。



  1. 首先,创建新的OneWire总线。
  2. 然后创建一个数组。由于我们计划在总线上安装一个传感器,因此我们创建了一个阵列。

现在,我们将在程序启动时组织一次该块的启动方案。为此,我们将组装这样的方案。



R-触发器位于元素库的“触发器”文件夹中。它用于突出显示提供给输入的脉冲的前沿。在输入电平从低到高的转换过程中,程序的输出将持续一个脉冲周期。
然后,我们创建一个新板,并将DS18x2x温度传感器拖到其上(元素库,Sensors文件夹)。我们调用块编辑器并参数化传感器。



  1. 从下拉列表中,选择引脚4上先前创建的OneWire总线
  2. 选择设置地址“数组”的模式
  3. 选择先前创建的传感器阵列
  4. 我们设置传感器的定期轮询模式,轮询频率为每1秒一次。


现在,必须将从传感器接收的值发送到环网。
在FLProg程序中,可以通过两种方式将控制器连接到环网。在这个针对Arduino№1的项目中,我们将考虑第一种方法-通过将变量发送到环的块。
我们将“ Send variable to the ring”块(元素库,UART文件夹)拉到板上,然后为其调用块编辑器。



  1. 首先,将控制器添加到环网中。

    在打开的窗口中,必须选择用于连接到环网的端口,端口速度,并在环网中设置设备名称。另外,为了方便使用项目,建议创建一个包含环形变量列表的文件,通过该文件,参与其中的所有控制器将被同步。
  2. 然后我们创建一个变量,该变量将被传送到环上,

    在变量创建窗口中,您必须指定变量名称及其类型。
  3. 之后,我们设置发送变量的周期模式,周期为1秒。


在对块进行参数设置之后,我们将传感器与发送块彼此连接,并在发送块的输入En处将常数设置为true。



我们创建一个新板,并将DHT-22传感器拖到其上(元素库,Sensors文件夹)。我们调用块编辑器并参数化传感器。



  1. 选择传感器连接针
  2. 选择传感器类型
  3. 我们设置温度和湿度输出的可用性
  4. 我们设置了以1秒的频率轮询传感器的周期性方法


然后,我们将发送变量的两个块拖动到第三块板上的环,在块设置中选择现有的环,然后在每个环中创建一个变量。





我们将其块彼此连接的字段,并在发送变量的En块的输入上输入常量为true。



Arduino№1项目完成。这样的方案应该可行:



现在为Arduino№2创建一个新项目。
立即将开发板连接到环。在这里,我们通过项目树使用第二种方法。我们打开树,直至包含“ Communications”分支,然后右键单击“ Rings”项。在出现的上下文菜单中,选择“添加铃声”项。



打开已知的振铃参数窗口。我们再次需要在环网中输入设备名称,然后选择将设备连接到环网的端口。但是现在我们不创建环变量文件,而是选择先前创建的文件。在这种情况下,项目之间的变量将自动同步。





通过调用相应分支上的上下文菜单,可以在项目树中更改所有环参数。
根据Arduino№2算法,它从DHT-22传感器捕获温度变量,将其值转换为字符串并将其发送到环。为此,将“从环获取变量”(Get variable from the ring)块拖到图上(元素库,“ UART”文件夹),并为其调用编辑器。



在编辑器中,选择环和相应的变量。
然后拖放“ String Conversion”块(元素库,“ Type Conversion”文件夹)并将该块的输入连接到“从Ring获取变量”



的输出,然后调用“ String Conversion”块的编辑器。


由于此块的输入为Float类型值,因此我们可以设置转换为字符串时的小数位数。我认为小数点对我们来说足够了。
然后我们将“ Send variable to ring”块(元素库,UART文件夹)拉出到电路上,并使用编辑器选择环并创建一个新变量,该变量将发送到环。我们还设置了周期发送模式,周期为1秒。





然后,我们将这些块连接在一起,并在变量发送块的输入En处设置常数true。



创建一个新板,然后将“从ring块获取变量”(元素库,“ UART”文件夹)拖到该板上,然后为其调用编辑器。在编辑器中,选择连接的环。由于根据算法,Arduino№3正在准备在显示器上显示的值,因此我们将创建一个新变量,该控制器将其发送给我们。



现在将块“ Display in HD44780 chip”(元素库,“ Displays”文件夹)拖放到图上,并为其调用编辑器并对其进行参数化。



  1. 创建一个新的显示
  2. 根据方案设置连接
  3. 设置显示参数
  4. 从块的输入组态数据显示
  5. 设置第一行的中心


之后,我们连接这些块,并在显示块的输入En处将常数设置为true。



Arduino№2项目完成。这样的方案应该起作用:



我们为Arduino№3创建一个项目。
我们可以使用上述任何一种方法将控制器连接到环网。连接时,选择先前创建的环形变量文件。



根据该算法,Arduino№3控制器从Arduino№1的DS18B20传感器捕获温度值,并将其转换为字符串,然后将此字符串发送至Arduino№2的环。我们已经拥有所有必要的变量。因此,类似于Arduino№2。将块“从环中获取变量”(元素库,文件夹“ UART”),“转换字符串”(元素库,文件夹“类型转换”)和块“发送变量到环”(元素库,UART文件夹)拖放到图上。然后我们将它们参数化。
“从环中获取变量”



“转换字符串”



“将变量发送至环”



之后,我们将它们收集到电路中



我们创建了一块新板来显示DHT-22传感器的温度。以与Arduino№2相同的方式,拖动“从环中获取变量”(元素库,文件夹“ UART”)和“在芯片上显示HD44780”(元素库,文件夹“ Displays”)。我们将它们参数化。
“从环中获取变量”



“在HD44780芯片上显示”我们



连接在一起。



我们创建一个用于显示湿度的新板。
我们还将“从ring获取变量”块(元素库,“ UART”文件夹)拖放到板上,然后进行参数设置。



然后拖放“字符串转换”块(元素库,“类型转换”文件夹),将其连接到“从Ring获取变量”块并将其参数化。





好吧,最后,我们拖动“ HD44780芯片上的显示”块(元素库,“ Displays”文件夹)。在对设备进行参数设置时,选择一个现有的显示器,并在第二行的中心显示湿度值。



我们将块连接在一起。



Arduino№3程序的创建已完成。
最终结果。



谢谢您的关注。

Source: https://habr.com/ru/post/zh-CN391365/


All Articles