微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > Arduino与LabVIEW互动应用

Arduino与LabVIEW互动应用

时间:01-06 来源:互联网 点击:
本文将介绍使用proteus仿真环境,实现Arduino UNO与LabVIEW的串口通讯,LabVIEW通过RS-232串口控制Arduino UNO的LED灯,打开和关闭LED灯。

1、Arduino UNO部分

在proteus仿真仿真环境中,使用ATmega328P单片机实现基于Proteus的Arduino UNO的开发板,如下图1所示。

图1基于Proteus的Arduino UNO的开发板

此处,还需要对ATmega328P的参数进行设置,初始的设置如图2所示。需要更改的地方已在图中用红色框标注出来了。更改之后的设置如图3所示,其中HEX文件与你自己所存放的地方一致即可。

图2ATmega328P单片机更改前的设置

图3ATmega328P单片机更改后的设置

另外,要实现与LabVIEW的串口通讯还需要对串口的参数进行设置,串口更改前的设置如图4所示。需要更改的地方已在图中用红色框标注出来了。更改之后的设置如图5所示,其中波特率与上位机的波特率相同即可。

注意:波特率一定要相同,否则不能完成通讯。

图4 串口更改前的设初始置

图5串口更改后的设置

Arduino的源代码如下所示:

#define LED_ON_COMMAND 0x10 //打开LED命令字

#define LED_OFF_COMMAND 0x20 //关闭LED命令字

unsigned int comdata[3]; //定义数组数据,存放串口命令数据

int led = 13; //定义LED连接的管脚

int ON_mark=0; //定义ON 的标志位

int OFF_mark=0; //定义OFF的标志位

void receive_data(void); //接受串口数据

void test_data(void); //测试串口数据是否正确,并更新数据

void do_command(void); //执行更新的数据

void setup()

{

Serial.begin(9600);

pinMode(led, OUTPUT);

}

void loop()

{

while (Serial.available() > 0) //不断检测串口是否有数据

{

receive_data(); //接受串口数据

test_data(); //测试数据是否正确并更新数据

do_command(); //执行更新的数据

}

}

void receive_data(void)

{

int i ;

for(i=0;i<3;i++)

{

comdata[i] =(unsigned char)(Serial.read());

//延时一会,让串口缓存准备好下一个字节,不延时可能会导致数据丢失,

delay(2);

}

}

void test_data(void) //验证命令的正确性

{

if(comdata[0] == 0x55) //0x55和0xAA均为判断是否为有效命令

{

if(comdata[1] == 0xAA)

{

switch(comdata[2])

{

case LED_ON_COMMAND:

{

ON_mark=1; //ON数据更新位置位

}

case LED_OFF_COMMAND:

{

OFF_mark=1; //OFF数据更新位置位

}

}

}

}

}

void do_command(void) //执行命令

{

if(OFF_mark==1)

{

OFF_mark=0; //复位OFF更新位

digitalWrite(led, LOW); //关闭LED灯

}

if(ON_mark==1)

{

ON_mark=0; //复位ON 更新位

digitalWrite(led, HIGH); //打开LED灯

}

}

2、LabVIEW部分

LabVIEW上位机部分担任主机,Arduino UNO作为下位机接收上位机发送的命令,并执行命令。LabVIEW只需要完成命令的发送,此处仅使用了LabVIEW的串口数据发送功能。LabVIEW的串口设置见。

LabVIEW程序包括两个部分:前面板和程序框图,前面板如图6所示,程序框图如图7、8、9所示。

图6LabVIEW前面板

图7LabVIEW程序框图1

图8LabVIEW程序框图2

图9LabVIEW程序框图3

3、实验与演示

利用虚拟串口技术,基于Proteus的Arduino UNO与LabVIEW串口通讯控制LED的视频如下:

基于Arduino Leonardo与LabVIEW的实物演示视频如下:

4、结束语

利用虚拟串口技术,实现了Proteus仿真环境下的Arduino UNO与LabVIEW串口通讯,并自定义了通讯协议,以保证通讯的可靠性。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top