Arduino與LabVIEW互動應用
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的視頻如下:
評論