亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> Arduino >> 瀏覽文章

Arduino與LabVIEW互動(dòng)應(yīng)用01-基于Arduino+LabVIEW的串口控制LED亮滅

作者:我不是奔跑哥   來(lái)源:我不是奔跑哥的blog   點(diǎn)擊數(shù):  更新時(shí)間:2014年06月08日   【字體:

本文將介紹使用proteus仿真環(huán)境,實(shí)現(xiàn)Arduino UNO與LabVIEW的串口通訊,LabVIEW通過(guò)RS-232串口控制Arduino UNO的LED燈,打開和關(guān)閉LED燈。

1、Arduino UNO部分
在proteus仿真仿真環(huán)境中,使用ATmega328P單片機(jī)實(shí)現(xiàn)基于Proteus的Arduino UNO的開發(fā)板,如下圖1所示。
圖1 基于Proteus的Arduino UNO的開發(fā)板
此處,還需要對(duì)ATmega328P的參數(shù)進(jìn)行設(shè)置,初始的設(shè)置如圖2所示。需要更改的地方已在圖中用紅色框標(biāo)注出來(lái)了。更改之后的設(shè)置如圖3所示,其中HEX文件與你自己所存放的地方一致即可。
圖2 ATmega328P單片機(jī)更改前的設(shè)置
圖3 ATmega328P單片機(jī)更改后的設(shè)置
另外,要實(shí)現(xiàn)與LabVIEW的串口通訊還需要對(duì)串口的參數(shù)進(jìn)行設(shè)置,串口更改前的設(shè)置如圖4所示。需要更改的地方已在圖中用紅色框標(biāo)注出來(lái)了。更改之后的設(shè)置如圖5所示,其中波特率與上位機(jī)的波特率相同即可。
   注意:波特率一定要相同,否則不能完成通訊。
圖4 串口更改前的設(shè)初始置
圖5 串口更改后的設(shè)置
Arduino的源代碼如下所示:

#define LED_ON_COMMAND  0x10   //打開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);           //打開LED燈
  }
}
2、LabVIEW部分
LabVIEW上位機(jī)部分擔(dān)任主機(jī),Arduino UNO作為下位機(jī)接收上位機(jī)發(fā)送的命令,并執(zhí)行命令。LabVIEW只需要完成命令的發(fā)送,此處僅使用了LabVIEW的串口數(shù)據(jù)發(fā)送功能。LabVIEW的串口設(shè)置見。
LabVIEW程序包括兩個(gè)部分:前面板和程序框圖,前面板如圖6所示,程序框圖如圖7、8、9所示

圖6 LabVIEW前面板

圖7 LabVIEW程序框圖1

圖8 LabVIEW程序框圖2
圖9 LabVIEW程序框圖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é)議,以保證通訊的可靠性。
關(guān)閉窗口

相關(guān)文章