7024浏览
查看: 7024|回复: 0

Arduino与LabVIEW串口控制LED亮灭

[复制链接]
本文将介绍使用proteus仿真环境,实现Arduino UNO与LabVIEW的串口通讯,LabVIEW通过RS-232串口控制Arduino UNO的LED灯,打开和关闭LED灯。

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


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

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

图3 ATmega328P单片机更改后的设置
    另外,要实现与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 =(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的串口设置见。
   
3、结束语
    利用虚拟串口技术,实现了Protues仿真环境下的Arduino UNO与LabVIEW串口通讯,并自定义了通讯协议,以保证通讯的可靠性,对LabVIEW与Arduino的串口通讯应用于数据采集、数据传输有一定的借鉴价值。
http://player.youku.com/player.php/sid/XNTU0Nzk4Nzk2/v.swf

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail