实验:流水灯 周日给自己小放了一天,所以今天周一接着做《Arduino与LabVIEW开发实战》这本书里的实验。前天尝试了LINX这个工具包,感觉用起来还是不太舒服的,虽然LIAT已经不再更新,但是还是可以试试LIAT,对比一下,说不定之后可以自己做一个工具包。 按照前天安装LINX的步骤,安装一下LIAT,在VIPM中搜索Arduino就可以找到它了。 安装好之后需要用Arduino IDE把LIAT提供的基础工程烧录到Arduino Uno中,这个基础工程的路径在你安装的LabVIEW路径下,我的是“D:\Program Files (x86)\National Instruments\LabVIEW 2021\vi.lib\LabVIEW Interface for Arduino\Firmware\LIFA_Base”,大家参考vi.lib这个文件夹之后的路径找到 这个文件。 然后一个 超级大坑 需要注意避免,烧录这个基础工程必须要使用 低版本 的Arduino IDE,我这里使用的是1.0.1( Previous IDE Releases | Arduino 在这个页面找到1.0.1下载即可)。不用低版本的Arduino IDE,会在运行的时候遇到5003这个错误如下图,还好网上有人解决过这个问题,不然我今天就死在这一步了。 下面按照《Arduino与LabVIEW开发实战》这本书里的实验步骤开始今天的流水灯: (1)实验目的 利用LIAT中的数字I/O函数库,通过LabVIEW控制Arduino Uno控制板上多个管脚上LED灯,实现依次点亮,依次熄灭,形成流水灯效果。 (2)硬件连接 书上是这样做的:硬件连接图如图4-3所示,LED灯的阳极通过220Ω的限流电阻接至Arduino Uno的D2~D7,阴极直接接至GND。最后,用USB电缆将Arduino Uno控制板与计算机的USB端口连接起来即可。 我为了省时间只连了四个LED灯,并且是用电阻(330Ω)作为接地的那一端,可以省点连线的工夫,但是电阻间离得很近,如果你想这么连别忘了把它们分开点, 还有注意分清发光二极管的正负极,具体的连接图如下: (3)程序设计 LabVIEW的前面板: 程序框图: 照例说下这个程序框图的基本过程,实际上做到现在就体会出LabVIEW这种可视化编程的香了,会比文本编程更有意思,虽然坑也多。 首先是必要的串口初始化,LIAT和之前的串口连接方式差不多,也是通过串口和下位机通信然后完成编程,这也是为什么要事先烧录一个程序,就是LIAT给了一个基础的程序,然后在VI中会给下位机发送数据,从而达到控制的目的,具体可以看看它的源程序。所以这里使用VISA进行串口连接,然后按照 给出的输入输出进行连线,这里需要注意的是LIAT中的默认波特率是115200,和Arduino程序中通常用的9600不一样。 其次是引脚初始化,For循环中D2~D5都设置为输出状态,用来控制LED灯的亮灭。 然后在While循环中通过一维数组循环移位、移位寄存器 和Digital Write Port实现流水灯,这里需要了解一下移位寄存器的概念( 循环结构 | LabVIEW 编程经验 )。逻辑很好理解就是将一个四个bool组成的一维数组中的True值循环移位,通过 来设置D2~D5的状态,这里需要注意的是 这个VI是控制D0~D13,所以需要在之前的一维数组基础上加入D0、D1的赋值。 最后再强调一下完成这个实验一些需要注意的地方: (1)确保你的LED灯都是好的。我在最后发现D5连接的小灯一直不亮,还以为哪里写错了,结果换了一个LED灯就好了。心痛,买了一个坏的LED灯。 (2)Arduino IDE使用低版本。具体原因也不知道Arduino IDE做出了哪些改变,有知道的小伙伴可以分享下哈。 (3)用Stop按钮停止程序。不然上一次连接串口没有关闭,再运行程序就连接不了了。我还特别喜欢用Abort 来停止程序,老要来回插拔Arduino Uno,这是个不好的习惯。 最后分享一下这个流水灯的效果: