KZC 发表于 2017-7-1 09:25

无线Tally自己动手不求人(四)编程篇

本帖最后由 KZC 于 2017-7-1 09:28 编辑

很多朋友一听到编程就非常头疼,觉得非常高深非常复杂,无法下手。实际上无论是硬件还是编程都和堆积木非常类似。只要明确了各个部分的功能和参数的意义,实现类似于Tally这种简单的功能还是非常轻松的。那么今天就将无线Tally的代码分享给大家。

出于最简单最容易理解的角度,我没有使用复杂点编码方式,而是直接以1字节表示一个Led的亮暗。比如8讯双色Tally我们就需要16字节来表示16个Led的亮暗信息。
那么先从主控端开始,为了简洁,在主控端我只写出了3讯双色Tally的代码。(所有//后和/* */之间的的都是注释)

int tally1=1;int tally2=2;int tally3=3;int tally4=4;int tally5=5;int tally6=6;//设置tally对应的模拟输入引脚号,如果有需要更多的led,则可以依次增加。int t1=0;int t2=0;int t3=0;int t4=0;int t5=0;int t6=0;//初始化模拟输入读取的存储,如果有需要更多的led,则可以依次增加。byte Tally={};/*初始化实际发送的一维字节数组。[]内的数值为实际Led数量+1。在这里我们有6个LED那么[]内数值即为6+1=7。*/void setup() {Serial1.begin(9600);}//初始化串口 9600为波特率。我们需要保证主控端和终端的波特率一致。
void loop() //循环体 会在经过setup初始化后持续循环执行{t1 = analogRead(tally1);t2 = analogRead(tally2);t3 = analogRead(tally3);t4 = analogRead(tally4);t5 = analogRead(tally5);t6 = analogRead(tally6);//读取模拟输入的值并存储到之前初始化的int类型中Tally=0;if(t1<912){    Tally=1;}else{    Tally=0;}if(t2<912){    Tally=1;}else{    Tally=0;}if(t3<912){    Tally=1;}else{    Tally=0;}if(t4<912){    Tally=1;}else{    Tally=0;}if(t5<912){    Tally=1;}else{    Tally=0;}if(t6<912){    Tally=1;}else{    Tally=0;}/*判断Tally信号的高低并写入编码后的数值到一维字节数组中。1即是亮,0即是灭。如果需要更多LED数量 即可将*//*if(t6<912){    Tally=1;}else{    Tally=0;} *//*这一段复制,每一段代表一个LED灯。只需修改两个[]中的数字即可。(复制时不含/* */)*/Serial1.write(Tally,7);/*将一维字节数组写入到串口中。最后的数字7需要与声明byte Tally的数值相同,等于Led数量+1.*/delay(30);//延迟30毫秒 以避免持续写入造成错误。}

以上即为我们主控端的程序代码。结构非常简单,也非常直观,如果需要更多的LED数量,则更改对应数值和复制对应模块即可。那么终端的程序代码则更为简单。

int led_pin1 = 3;int led_pin2 = 4;//设置数字输出引脚序号。byte Tally={};//[]中数字需要与主控端的保持一致void setup() {    Serial.begin(9600);    pinMode(led_pin1,OUTPUT);    pinMode(led_pin2,OUTPUT);}//设置数字引脚为输出。
void loop() {//循环体Serial.readBytes(Tally,7);//从串口中读取Tally数据。if(Tally==0){   if(Tally==1)   {      digitalWrite(led_pin1, HIGH);   }   else   {      digitalWrite(led_pin1, LOW);   }   if(Tally==1)   {      digitalWrite(led_pin2, HIGH);   }   else   {      digitalWrite(led_pin2, LOW);   }    /*此处只针对两个LED进行操作,因为我们是使用双色Tally ,每个终端只控制两个LED的亮暗,那么如何区别不同讯道呢?我们依旧只需要更改[]中的数值,在这个例子中我们写出了第一讯,那么如果我们需要第二讯,则可以将1和2修改为3和4。第三讯则将1和2修改为5和6。之后以此类推即可。一开始的Tally保持不变。*/}}

以上即为我们需要的全部程序代码,稍有编程经验的人估计在一个小时内就能写出来,那么毫无编程经验的人,根据说明,也可以经过修改对应数值和模块就能实现所需要的功能。
最简单的两讯道的系统全部部件和连线。左侧为主控端 右侧为两个终端。
一个三讯系统所需要的器件。
以上即为我们无线Tally的全部内容了,希望能够对各位有所帮助。如果有其他想自己动手做的影视设备,欢迎在下方评论和给我留言。

页: [1]
查看完整版本: 无线Tally自己动手不求人(四)编程篇