本帖最后由 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[7]={}; /*初始化实际发送的一维字节数组。[]内的数值为实际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]=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信号的高低并写入编码后的数值到一维字节数组中。1即是亮,0即是灭。如果需要更多LED数量 即可将*/ /* if(t6<912) { Tally[6]=1; } else { Tally[6]=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[7]={}; //[]中数字需要与主控端的保持一致 void setup() { Serial.begin(9600); pinMode(led_pin1,OUTPUT); pinMode(led_pin2,OUTPUT); } //设置数字引脚为输出。
void loop() { //循环体 Serial.readBytes(Tally,7); //从串口中读取Tally数据。 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进行操作,因为我们是使用双色Tally ,每个终端只控制两个LED的亮暗,那么如何区别不同讯道呢?我们依旧只需要更改[]中的数值,在这个例子中我们写出了第一讯,那么如果我们需要第二讯,则可以将1和2修改为3和4。第三讯则将1和2修改为5和6。之后以此类推即可。一开始的Tally[0]保持不变。*/ } }
以上即为我们需要的全部程序代码,稍有编程经验的人估计在一个小时内就能写出来,那么毫无编程经验的人,根据说明,也可以经过修改对应数值和模块就能实现所需要的功能。
最简单的两讯道的系统全部部件和连线。左侧为主控端 右侧为两个终端。 一个三讯系统所需要的器件。
以上即为我们无线Tally的全部内容了,希望能够对各位有所帮助。如果有其他想自己动手做的影视设备,欢迎在下方评论和给我留言。
|