无线Tally自己动手不求人(四)编程篇@拍电影filmaker.cn
本帖最后由 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的全部内容了,希望能够对各位有所帮助。如果有其他想自己动手做的影视设备,欢迎在下方评论和给我留言。
赞 (0)