1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

專注電子技術學習與研究
當前位置:單片機教程網 >> Arduino >> 瀏覽文章

Arduino與LabVIEW互動應用01-基于Arduino+LabVIEW的串口控制LED亮滅

作者:我不是奔跑哥   來源:我不是奔跑哥的blog   點擊數:  更新時間:2014年06月08日   【字體:

本文將介紹使用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串口通訊,并自定義了通訊協議,以保證通訊的可靠性。
關閉窗口

相關文章