新闻中心

EEPW首页>测试测量>设计应用> Arduino与LabVIEW互动应用

Arduino与LabVIEW互动应用

作者: 时间:2017-01-06 来源:网络 收藏
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所示。
图6 LabVIEW前面板
图7 LabVIEW程序框图1
图8 LabVIEW程序框图2
图9 LabVIEW程序框图3
3、实验与演示
利用虚拟串口技术,基于Proteus的Arduino UNO与LabVIEW串口通讯控制LED的视频如下:
基于Arduino Leonardo与LabVIEW的实物演示视频如下:
4、结束语
利用虚拟串口技术,实现了Proteus仿真环境下的Arduino UNO与LabVIEW串口通讯,并自定义了通讯协议,以保证通讯的可靠性。

上一页 1 2 下一页

评论


技术专区

关闭