日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

無線Tally自己動手不求人(四)編程篇@拍電影filmaker.cn

 看見就非常 2021-02-03
本帖最后由 KZC 于 2017-7-1 09:28 編輯

很多朋友一聽到編程就非常頭疼,覺得非常高深非常復(fù)雜,無法下手。實(shí)際上無論是硬件還是編程都和堆積木非常類似。只要明確了各個部分的功能和參數(shù)的意義,實(shí)現(xiàn)類似于Tally這種簡單的功能還是非常輕松的。那么今天就將無線Tally的代碼分享給大家。

出于最簡單最容易理解的角度,我沒有使用復(fù)雜點(diǎn)編碼方式,而是直接以1字節(jié)表示一個Led的亮暗。比如8訊雙色Tally我們就需要16字節(jié)來表示16個Led的亮暗信息。

那么先從主控端開始,為了簡潔,在主控端我只寫出了3訊雙色Tally的代碼。(所有//后和/* */之間的的都是注釋)



int tally1=1;
int tally2=2;
int tally3=3;
int tally4=4;
int tally5=5;
int tally6=6;
//設(shè)置tally對應(yīng)的模擬輸入引腳號,如果有需要更多的led,則可以依次增加。
int t1=0;
int t2=0;
int t3=0;
int t4=0;
int t5=0;
int t6=0;
//初始化模擬輸入讀取的存儲,如果有需要更多的led,則可以依次增加。
byte Tally[7]={};
/*初始化實(shí)際發(fā)送的一維字節(jié)數(shù)組。[]內(nèi)的數(shù)值為實(shí)際Led數(shù)量+1。在這里我們有6個LED那么[]內(nèi)數(shù)值即為6+1=7。*/
void setup() {
  Serial1.begin(9600);
}
//初始化串口 9600為波特率。我們需要保證主控端和終端的波特率一致。

void loop()
//循環(huán)體 會在經(jīng)過setup初始化后持續(xù)循環(huán)執(zhí)行
{
  t1 = analogRead(tally1);
  t2 = analogRead(tally2);
  t3 = analogRead(tally3);
  t4 = analogRead(tally4);
  t5 = analogRead(tally5);
  t6 = analogRead(tally6);
//讀取模擬輸入的值并存儲到之前初始化的int類型中
  Tally[0]=0;
  if(t1<912)
  {
    Tally[1]=1;
  }
  else
  {
    Tally[1]=0;
  }
  if(t2<912)
  {
    Tally[2]=1;
  }
  else
  {
    Tally[2]=0;
  }
  if(t3<912)
  {
    Tally[3]=1;
  }
  else
  {
    Tally[3]=0;
  }
  if(t4<912)
  {
    Tally[4]=1;
  }
  else
  {
    Tally[4]=0;
  }
  if(t5<912)
  {
    Tally[5]=1;
  }
  else
  {
    Tally[5]=0;
  }
  if(t6<912)
  {
    Tally[6]=1;
  }
  else
  {
    Tally[6]=0;
  }  
/*判斷Tally信號的高低并寫入編碼后的數(shù)值到一維字節(jié)數(shù)組中。1即是亮,0即是滅。如果需要更多LED數(shù)量 即可將*/
/*
if(t6<912)
  {
    Tally[6]=1;
  }
  else
  {
    Tally[6]=0;
  }
*/
/*這一段復(fù)制,每一段代表一個LED燈。只需修改兩個[]中的數(shù)字即可。(復(fù)制時不含/* */)*/
  Serial1.write(Tally,7);
/*將一維字節(jié)數(shù)組寫入到串口中。最后的數(shù)字7需要與聲明byte Tally的數(shù)值相同,等于Led數(shù)量+1.*/
  delay(30);
//延遲30毫秒 以避免持續(xù)寫入造成錯誤。
}



以上即為我們主控端的程序代碼。結(jié)構(gòu)非常簡單,也非常直觀,如果需要更多的LED數(shù)量,則更改對應(yīng)數(shù)值和復(fù)制對應(yīng)模塊即可。
那么終端的程序代碼則更為簡單。



int led_pin1 = 3;
int led_pin2 = 4;
//設(shè)置數(shù)字輸出引腳序號。
byte Tally[7]={};
//[]中數(shù)字需要與主控端的保持一致
void setup() {
    Serial.begin(9600);
    pinMode(led_pin1,OUTPUT);
    pinMode(led_pin2,OUTPUT);
}
//設(shè)置數(shù)字引腳為輸出。

void loop() {
  //循環(huán)體
  Serial.readBytes(Tally,7);
  //從串口中讀取Tally數(shù)據(jù)。
  if(Tally[0]==0)
  {
     if(Tally[1]==1)
     {
        digitalWrite(led_pin1, HIGH);
     }
     else
     {
        digitalWrite(led_pin1, LOW);
     }
     if(Tally[2]==1)
     {
        digitalWrite(led_pin2, HIGH);
     }
     else
     {
        digitalWrite(led_pin2, LOW);
     }
    /*此處只針對兩個LED進(jìn)行操作,因?yàn)槲覀兪鞘褂秒p色Tally ,每個終端只控制兩個LED的亮暗,那么如何區(qū)別不同訊道呢?我們依舊只需要更改[]中的數(shù)值,在這個例子中我們寫出了第一訊,那么如果我們需要第二訊,則可以將1和2修改為3和4。第三訊則將1和2修改為5和6。之后以此類推即可。一開始的Tally[0]保持不變。*/
  }
}



以上即為我們需要的全部程序代碼,稍有編程經(jīng)驗(yàn)的人估計(jì)在一個小時內(nèi)就能寫出來,那么毫無編程經(jīng)驗(yàn)的人,根據(jù)說明,也可以經(jīng)過修改對應(yīng)數(shù)值和模塊就能實(shí)現(xiàn)所需要的功能。

最簡單的兩訊道的系統(tǒng)全部部件和連線。左側(cè)為主控端 右側(cè)為兩個終端。
微信圖片_20170627190158.jpg
一個三訊系統(tǒng)所需要的器件。

以上即為我們無線Tally的全部內(nèi)容了,希望能夠?qū)Ω魑挥兴鶐椭H绻衅渌胱约簞邮肿龅挠耙曉O(shè)備,歡迎在下方評論和給我留言。


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多