小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

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

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

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

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



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

void loop()
//循環(huán)體 會(huì)在經(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);
//讀取模擬輸入的值并存儲(chǔ)到之前初始化的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信號(hào)的高低并寫入編碼后的數(shù)值到一維字節(jié)數(shù)組中。1即是亮,0即是滅。如果需要更多LED數(shù)量 即可將*/
/*
if(t6<912)
  {
    Tally[6]=1;
  }
  else
  {
    Tally[6]=0;
  }
*/
/*這一段復(fù)制,每一段代表一個(gè)LED燈。只需修改兩個(gè)[]中的數(shù)字即可。(復(fù)制時(shí)不含/* */)*/
  Serial1.write(Tally,7);
/*將一維字節(jié)數(shù)組寫入到串口中。最后的數(shù)字7需要與聲明byte Tally的數(shù)值相同,等于Led數(shù)量+1.*/
  delay(30);
//延遲30毫秒 以避免持續(xù)寫入造成錯(cuò)誤。
}



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



int led_pin1 = 3;
int led_pin2 = 4;
//設(shè)置數(shù)字輸出引腳序號(hào)。
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);
     }
    /*此處只針對(duì)兩個(gè)LED進(jìn)行操作,因?yàn)槲覀兪鞘褂秒p色Tally ,每個(gè)終端只控制兩個(gè)LED的亮暗,那么如何區(qū)別不同訊道呢?我們依舊只需要更改[]中的數(shù)值,在這個(gè)例子中我們寫出了第一訊,那么如果我們需要第二訊,則可以將1和2修改為3和4。第三訊則將1和2修改為5和6。之后以此類推即可。一開始的Tally[0]保持不變。*/
  }
}



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

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

以上即為我們無線Tally的全部內(nèi)容了,希望能夠?qū)Ω魑挥兴鶐椭?。如果有其他想自己?dòng)手做的影視設(shè)備,歡迎在下方評(píng)論和給我留言。


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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多