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_COMMAND0x10 //打开LED命令字
[*]#define LED_OFF_COMMAND 0x20 //关闭LED命令字
[*]
[*]unsigned int comdata; //定义数组数据,存放串口命令数据
[*]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 == 0x55) //0x55和0xAA均为判断是否为有效命令
[*] {
[*] if(comdata == 0xAA)
[*] {
[*] switch(comdata)
[*] {
[*] 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
页:
[1]