色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > Arduino與LabVIEW互動(dòng)應(yīng)用

          Arduino與LabVIEW互動(dòng)應(yīng)用

          作者: 時(shí)間:2017-01-06 來(lái)源:網(wǎng)絡(luò) 收藏
          Arduino的源代碼如下所示:

          #define LED_ON_COMMAND 0x10 //打開(kāi)LED命令字
          #define LED_OFF_COMMAND 0x20 //關(guān)閉LED命令字
          unsigned int comdata[3]; //定義數(shù)組數(shù)據(jù),存放串口命令數(shù)據(jù)
          int led = 13; //定義LED連接的管腳
          int ON_mark=0; //定義ON 的標(biāo)志位
          int OFF_mark=0; //定義OFF的標(biāo)志位
          void receive_data(void); //接受串口數(shù)據(jù)
          void test_data(void); //測(cè)試串口數(shù)據(jù)是否正確,并更新數(shù)據(jù)
          void do_command(void); //執(zhí)行更新的數(shù)據(jù)
          void setup()
          {
          Serial.begin(9600);
          pinMode(led, OUTPUT);
          }
          void loop()
          {
          while (Serial.available() > 0) //不斷檢測(cè)串口是否有數(shù)據(jù)
          {
          receive_data(); //接受串口數(shù)據(jù)
          test_data(); //測(cè)試數(shù)據(jù)是否正確并更新數(shù)據(jù)
          do_command(); //執(zhí)行更新的數(shù)據(jù)
          }
          }
          void receive_data(void)
          {
          int i ;
          for(i=0;i<3;i++)
          {
          comdata[i] =(unsigned char)(Serial.read());
          //延時(shí)一會(huì),讓串口緩存準(zhǔn)備好下一個(gè)字節(jié),不延時(shí)可能會(huì)導(dǎo)致數(shù)據(jù)丟失,
          delay(2);
          }
          }
          void test_data(void) //驗(yàn)證命令的正確性
          {
          if(comdata[0] == 0x55) //0x55和0xAA均為判斷是否為有效命令
          {
          if(comdata[1] == 0xAA)
          {
          switch(comdata[2])
          {
          case LED_ON_COMMAND:
          {
          ON_mark=1; //ON數(shù)據(jù)更新位置位
          }
          case LED_OFF_COMMAND:
          {
          OFF_mark=1; //OFF數(shù)據(jù)更新位置位
          }
          }
          }
          }
          }
          void do_command(void) //執(zhí)行命令
          {
          if(OFF_mark==1)
          {
          OFF_mark=0; //復(fù)位OFF更新位
          digitalWrite(led, LOW); //關(guān)閉LED燈
          }
          if(ON_mark==1)
          {
          ON_mark=0; //復(fù)位ON 更新位
          digitalWrite(led, HIGH); //打開(kāi)LED燈
          }
          }
          2、LabVIEW部分
          LabVIEW上位機(jī)部分擔(dān)任主機(jī),Arduino UNO作為下位機(jī)接收上位機(jī)發(fā)送的命令,并執(zhí)行命令。LabVIEW只需要完成命令的發(fā)送,此處僅使用了LabVIEW的串口數(shù)據(jù)發(fā)送功能。LabVIEW的串口設(shè)置見(jiàn)。
          LabVIEW程序包括兩個(gè)部分:前面板和程序框圖,前面板如圖6所示,程序框圖如圖7、8、9所示。
          圖6LabVIEW前面板
          圖7LabVIEW程序框圖1
          圖8LabVIEW程序框圖2
          圖9LabVIEW程序框圖3
          3、實(shí)驗(yàn)與演示
          利用虛擬串口技術(shù),基于Proteus的Arduino UNO與LabVIEW串口通訊控制LED的視頻如下:
          基于Arduino Leonardo與LabVIEW的實(shí)物演示視頻如下:
          4、結(jié)束語(yǔ)
          利用虛擬串口技術(shù),實(shí)現(xiàn)了Proteus仿真環(huán)境下的Arduino UNO與LabVIEW串口通訊,并自定義了通訊協(xié)議,以保證通訊的可靠性。

          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉