[marco|arduino]当 3D8光立方 遇见 Arduino

Photobucket
When 3D8 meets Arduino

正如之前所预见的一样,因为用的是应用最为广泛的串口通讯协议,所以一开始就说可以用Atrduino可以驱动3D8。今天我们试试看罗。

虽然在上一篇日志里面提到用 Arduino 直接驱动点阵屏,可惜不能兑现了。一方面是因为说句实在话,Arduino的官方IDE确实不太好用,而且编译、下载都很慢,另一方面,因为Arduino的“专业语言”,其实已经高度抽象化(变得太“高级”),如果是调用库函数的话,就还好,但是要去实现底层的硬件操作,其实效果未必好,而且效率估计也很低。

3D8之所以好用,其实是因为其实现了驱动与动画的分离。虽然有很多朋友一直在问我们如何将动画烧进去。答案其实不能烧进去。因为除非有或者能编写出底层的LED驱动代码,否则光有动画算法的话,其实依然不足以显示动画。但是,其实我们的设计中,其实有个叫做“控制卡”,我们更习惯称之为“小卡”的部件,专门用来存储动画算法,运算,并发送给母版(“大板”)。虽然带有USB插口,其本质其实就是一个以STC12C5A60S2主芯片+22.1184M外部晶振的51最小系统。这个USB插口,其实是一个“伪USB”,并不能在电脑上安装驱动,然后进行自定义操作,要烧写其Flash依然需要通过串口模块(CP2102或PL2303等)。

而在这个“伪USB”接口中的4条线。其实就是VCC、GND、TXD、RXD。GND当然很重要,作为共地,无论是供电或是串口通讯都会用到。VCC自然就是取电来用。而TXD\RXD,就是串口通讯中最为重要的2条线。所以从3D8的大USB母口中,把这4条线取出来。就能对其进行串口通讯,指挥动画的显示。至于是不是一定是51单片机系统,其实倒也无所谓。还是一条,波特率是115200就好。

好在Arduino完全可以很轻松地实现波特率为115200的串口通讯,也就是说,即便我还没有亲手实验,就已经心知肚明Arduino可以指挥3D8。道理和市面上常见的舵机板一样,舵机板是玩机器人的朋友一定会用到的东西。而指挥舵机板,就是用串口通讯。至于上位机是什么主芯片的主控板、电脑上位机、甚至于蓝牙串口模块遥控,其实都无所谓,不挑食。连接Arduino标准版也一样,Vcc(5v),GND接好,txd/rxd和Arduino的rx/dx连一下。如果不行,就反过来再试一下就是了。不过,要注意的是,应保证只有一路信号输入,别一边用MiniUSB接着电脑,一边用arduino,那样的数据肯定是乱七八糟,两个并行信号发射系统一定会“打起架来”。

测试过程比我想象地要简单的多,最多是,3D8可能要重启一下以实现同步,别的也就什么,基本就是即插即用。

例程里面的动画,其实都是从《【宏项目】3D8 之 串口通讯协议》PDF文档中移植过来。算法都没有改动,无非是修改了数据类型,以及串口函数的名称。同时Arduino默认的延时函数,就是以毫秒为单位,delay(1000)就是延时一秒钟,而在原先51的延时函数中,其实延时函数是以时钟周期为单位,所以延时函数的参数进行了一下调整,以保持动画的流畅,就是这些改动。在Arduino系统中,进一步省略了串口初始化等函数,代码倒是更加简洁。例程公布在这边,欢迎大家下载测试,接线的说明,请参见如下视频。我现在玩Arduino累计时间还不超过8个小时哦,实践证明,Arduino确实是比较适合初学者玩的系统,如果想迅速上手玩玩机器人之类的朋友,不妨试试看。

前一阵主要的精力都用于更新上位机,搞得3D8好像离开电脑就玩不转一样,其实不是这样。协议是公开的,用您熟悉的语言,用您钟爱的单片机系统,一起玩转3D8光立方吧~

// Sample Animation Code for Arduino to control 3D8 by Serial Communication
// Copyright 2011-2013 @ aGuegu 
#define LAYER_COUNT 8
#define COLUMN_COUNT 64

void setup()
{ 
	delay(1000);
	randomSeed(analogRead(0));
	Serial.begin(115200);    
}

void loop()
{
	byte pCube[COLUMN_COUNT];

	DemoAll();
	DemoAll();  

	DemoScanByZ();
	DemoScanByY();
	DemoScanByX();

	DemoRise(pCube);
}

void DemoAll()
{
	static byte x = 0xff;
	funPrintUniqueValue2Cube(x);
	x = ~x;  
	delay(1000);
}

void DemoRise(byte *pCube)
{
	byte i, x, y, j;

	j = 0x80;
	while(j--)	
	{		
		for(i=0; i

Arduino程序源文件,一样,下载请留名,谢谢,:)
_003_3D8_Control

特别感谢:@Togke@三水

2011.10.17更新
根据Arduino Reference,函数void funPrintCube(byte *p)可由

void funPrintCube(byte *p)
{
	byte i;
	Serial.write(0xf2);	

	for (i=0; i < COLUMN_COUNT; i++)			
		Serial.write(p[i]);
}

改为

void funPrintCube(byte *p)
{
	Serial.write(0xf2);				
	Serial.write(p, COLUMN_COUNT);
}

是不是又简明了许多啊~

关于aGuegu

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

    把我落满灰尘的Arduino1280找出来试一下!

  • 博主很强大,我支持

  • joozen

    博主很强大,学生下载受教了,谢谢无私分享智慧

  • baihuahe

    会一直支持,,,一直看下去,,

  • 常州小白

    博主,,给力

  • 孙常久

    我想用Arduino驱动3D8显示汉字该怎么进行计算呢?我QQ674417075,望高人指点啊

    • 在8*8的点阵上,没法实现基本的16*16的最小汉字点阵的显示。而且因为点间距比较远,所以也比较难连成比划。还是着眼于动画以及动态的画面吧,需要讨论,欢迎加Q群。

  • xingwangjy

    做过一次失败啦,再接再励

    • 加油哦,欢迎进群讨论。

  • 歐陽健友

    我好想做啊! 但係如何著手啊?

  • 楼主,你是神

    楼主,你是大神啊。
    我现在才开始学习单片机,楼主你觉得是先学习51还是直接上手Arduino?

    • 是这样,如果您还是学生,而学校里面都还在玩51的话,先玩玩51也没什么不好。如果是自己由兴趣开始接触,那么就直接 Arduino 吧~

  • 歐陽健友

    老師, 買了 3 d 8 但沒有資料, 我可以怎樣做. 可以快一點聯繫我嗎? 我q 群問了, 阿里旺旺也問了.

    • 如果是在Xuping的淘宝店购买的话,资料向淘宝掌柜联系罗。没在线的话,就留言一个邮箱嘛,会给你发的。

      • 歐陽健友

        好的, 好的

        • felix

          Hey aGuegu – can you help get in contact with Luo at Taobao – I can’t read chinese and can’t find contact info.

          I WANT THIS CUBE 😉

          Thanks

  • 歐陽健友

    Arduino程序源文件,一样,下载请留名,谢谢,:)

    black15725@gmail.com

    1503748628@qq.com

    • 歐陽健友

      我留名

  • black15725@gmail.com

    己經可以用ARDUINO 連接3 D8 了. 但是用電池還是不能推動它, 還不能脫離電腦使用.

    • 嗯,一般电池的输出能力不够啦。如果是航模用的电池还会好一些。

  • black15725@gmail.com

    好奇怪, 直接用DC接頭唔得, 但係我引線出來接入V IN , GND 就可以. 同埋樓主有無寫埋其他動作. 我試了你的程式只有三個動作

    • 三个程式,抛砖引玉吧,我会陆续有新的arduino动画源码开放。

      • 歐陽

        好的, 我也會試試.

  • 歐陽健友

    有無程式的教學, 看不懂, 想多寫一些動作都不行.

  • chuanping87

    太牛了顶一个

  • Pingback: [arduino|macro](4)UNO 外部控制 3D8S 光立方动画效果(视频) | Agu's Mill 古作坊()

  • 吴泽泽

    博主,想问下底部的那块主板是怎么焊的呢?

    • 这个怎么焊……就是那样焊的咯,光焊也解决不了问题嘛,上面也有单片机的呀。

  • szm

    可以这样玩,真的开眼了,感谢楼主的饕餮盛宴

  • 下载看看···

  • Nick

    Hello,

    I just bought this 3D8 Led Cube on AliExpress – no manual, no assembly instructions, no software. Do you know where I can download them? (in English, preferably).

    Thank you.

    -Nick

  • 张兴旺

    Atmega开发使用什么软件编程,要安装啥编译器?使用什么软件烧写程序到芯片?

    • 就是arduino系列用的工具,avr-gcc,avrdude

  • 博主真给力!

  • 韩恺

    我用51的做出来了 老师让我用arduino试试 所以看一下你的资料 谢谢共享

  • 随易而安

    博主很强大,我支持

  • hscxyf

    真给力