博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于Arduino+LabVIEW的串口控制LED亮灭
阅读量:6007 次
发布时间:2019-06-20

本文共 2440 字,大约阅读时间需要 8 分钟。

hot3.png

本文将介绍使用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文件与你自己所存放的地方一致即可。
图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[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串口通讯,并自定义了通讯协议,以保证通讯的可靠性。

转载于:https://my.oschina.net/ArduinoAndLabVIEW/blog/137606

你可能感兴趣的文章
配置 SSH Key ☞ GitHub
查看>>
操作系统思考 第零章 前言
查看>>
kmdjs和循环依赖
查看>>
Handler 系列二:怎么通信
查看>>
WorkPlus JS SDK
查看>>
Elm 架构教程
查看>>
Android Studio工具修理集
查看>>
Markdown中超链接增加_blank的方法
查看>>
机器人都能造飞机了,你还在呼呼大睡?
查看>>
linux 内核的链表操作(好文不得不转)
查看>>
《泛在服务 ,平台创新》移动电商生态研究报告
查看>>
JVM学习系列:了解JVM options参数配置 & 看懂GC日志
查看>>
12C 对表分区维护的增强
查看>>
算术运算表达式正则及分析
查看>>
linux tcpdump
查看>>
如何实现文件增量同步——算法
查看>>
R.string获取的是数字或者R.integer数字不对的问题
查看>>
dpkg ---- apt-get ------ aptitude 三种方式的区别 及命令格式
查看>>
SQL Server 2008 R2 死锁监控
查看>>
android APP实现更新 PHP后台服务器
查看>>