[marco|arduino](3)3D8S串口通讯协议的扩展(视频)

Photobucket

3D8S 沿用旧版 3D8 的设计,实现驱动与动画的分离。设计动画本来就是在应用层面的事情,在底层驱动上直接设计,就显得比较苦逼了。而且 3D8S 为了满足部分用户对”脱机”控制的需要,也有容量更加强大的“小卡”,方便把驱动和动画都在一片单片机上,不过这其实会对编程提出更高的要求,我在博客这边接下来会提供示例的代码。

目前的小卡,有2个版本,一种内核是ATmega8(8K),一种是ATmega328p(32K),都是基于arduino。前者只是烧写驱动和通讯协议,不含动画,需要通过外部控制器(可以是电脑、单片机系统、甚至是另一片arduino)进行动画控制;后者则是完整的 arduino 平台,结合3D8S相关类库,进行驱动和动画控制。个人建议,当然是2片小卡都有比较好。

本文介绍,8K版本上集成的串口通讯协议。

新版协议除了将波特率降低至57600以外,兼容旧版的协议

命令头 参数表 功能
0xF0 1个字节 全局赋值
0xF1 2个字节 单束赋值
0xF2 64个字节 批量赋值

发送命令的时候,只要把头字节和后面的参数连成一串,一起通过串口发送,就能完成相应的操作。理解这三条命令,只要理解这单束赋值命令(0xF1),理解其它两条也就不难了。一条单束赋值命令,包含3个字节,如”0xf1 0x00 0x0f”,第一个字节“0xf1”是命令头,表示这条命令是单束赋值指令。第1个参数“0x00”,对应需要将第2个参数“0x0f”赋值到的那一束的序号。

关于序号的确定,就要联系到坐标系的建立。新版默认的坐标系与旧版一致,使用内侧右边最底下的那个LED作为坐标原点。而束坐标c的范围是0x00-0x3f,0-64,对应xoy平面的64束,束坐标c = 8*y+x。因为x、y的取值范围都是[0,7],所以束坐标的范围也就是[0,63]。反过来,有了束坐标c,也同样可以通过 x=c%8,y=c/8,计算出x,y的值。

而第二个赋值参数,就对应那一束内的8个LED状态。一个字节有8位,从低位到高位,对应z=0到z=7的8个LED的亮灭,其中为1,LED亮,为0,LED为灭。

从数据核心来说,其实一个8x8x8的单色光立方,其所有的数据就是一个64长的单字节数组。而动画的设计,其实就冲着数组去就好了。

而全局赋值命令(0xF0),就是把所有的束,都设置成后面跟着的那个参数。批量赋值,就是直接发送这64个字节的数据,从低到高,依次发送到每一束上就是了。

命令头 参数表 功能
0xf3 1个字节
取值范围{0x00, 0x01, 0x02, 0x03}
数据输入模式选择,默认为0x03
0xf4 1个字节
取值范围[0x00, 0xff]
全局亮度控制
0xf5 1个字节
第0位控制上面的4个led
第1位控制下面垫脚的4个led
装饰LED控制

目前这新增的三个控制命令,旧版3D8暂时不支持。

先前提到坐标系的建立,因为发送的是数组,而数组还是有方向性的,不同的动画,使用的运算或多或少还是有所不同,但不外乎数组操作和位运算。这就导致一些动画,在某个方向来写,比其他角度来写会更简单,而好不容易把动画写出来,要让它多角度显示又成了问题。新版3D8,其实就把左边的变化也集成到协议中。这些事情,全部交给底层去操作。同时,将主要的坐标原点转移到了前方左上角的点。这个其实是更加规范的设计,毕竟大多数的屏幕的控制都选用左上角作为原点。同时旋转坐标系,包含了三种输入方式。只要在发送坐标之前,先发送一条模式命令,告知主控要按照什么样的方式进行输入,就可以更加灵活地进行控制。赋值依然通过前三条命令。

全局亮度控制命令“0xf4”,很容易理解,直接发送亮度数据,0xff时亮度最亮,0x00亮度为0,等于全灭。旧版使用电位器进行控制,调节范围也有限,现在完全使用软件实现。

装饰LED控制命令“0xf5”,很简单,配合串口命令示例程序,比划一下就好。

所有这些命令可以配合起来使用,至于怎么拆分“解码”,都交给M8的小卡就好,:)

视频讲解:

关于基础协议的介绍,可参考《[Macro]3D8 之 串口通讯协议

关于上位机的说明,可参考《[Macro]3D8-2012 上位机程序大升级~

视频中提到的2款上位机程序,运行需要Microsoft .Net Framework 4 Client Profile支持,目前以放入3D8光立方技术交流群(165068863)共享。

上位机下载链接:https://github.com/downloads/aguegu/dot-matrix/3D8S_CSharp_Controller.7z

淘宝传送门:http://syyyd.taobao.com/search.htm?scid=506618425

关于aGuegu

向着更高的逼格
此条目发表在3D8 光立方, C#, 成品分类目录,贴了, , , , , , , , , , , , 标签。将固定链接加入收藏夹。