<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> 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串口通訊,并自定義了通訊協議,以保證通訊的可靠性。
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮