YFROBOT创客社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 34732|回复: 30
打印 上一主题 下一主题

光立方原理图 制作过程V1.4,arduino驱动光立方,灯塔搭建,驱动函数,动画演示

[复制链接]

签到天数: 63 天

[LV.6]常住居民II

跳转到指定楼层
楼主
发表于 2014-1-14 08:16:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
视频地址:http://v.youku.com/v_show/id_XNjc4MDMyMzY0.html

      因版本不同,驱动板外观有所区别,但灯塔的搭建方式是相同的。

亲自动手制作一个光立方,将能够给你带来无穷乐趣,做好后,还可以把他放在房间里,当作一盏小灯,每到夜晚,光彩夺目。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 支持支持 反对反对

签到天数: 63 天

[LV.6]常住居民II

推荐
 楼主| 发表于 2016-1-15 08:13:09 | 只看该作者
Sawada 发表于 2016-1-14 18:15
可是裡面的程序的副檔名都是.c例如LED.C要怎麼用Arduino燒錄
不好意思,搞错了,现在更新为1.4了。4楼的回复中也有相关连接。
回复 支持 1 反对 0

使用道具 举报

签到天数: 63 天

[LV.6]常住居民II

板凳
 楼主| 发表于 2014-2-14 09:55:09 | 只看该作者

光立方按键中断调速

光立方按键中断调速。
视频地址:http://v.youku.com/v_show/id_XNjc4OTA2NDc2.html                                                                 
         这层楼,将介绍按键中断调速。调速!首先我们需要知道调哪个参数,可以改变动画速度,当然,第一个想到的就是变量speed,在很多的动画中我们都使用了这个变量,但是我们在显示每个动画的时候是不是都要检测speed的值?这样保证调速的实时性?主函数中,我们动画显示部分会不会很乱?好了,写了改变这个变量。我们就会对主函数动画部分进行大的改动。pass这个想法。
    再看void Frame(u8 *a,u8 speed),因为我们知道,每个动画显示时都会调用此函数。

  1. void Frame(u8 *a,u8 speed)
  2. {
  3.         u8 i,j,num;
  4.         while(speed--)
  5.         {        
  6.                 num = 0x01;
  7.                 for(i = 0;i < 8;i++) //层数层控制,选通某一层,
  8.                              //使得第1层到第8层,依次点亮
  9.                 {        
  10.                         num <<= i;
  11.                         RCK = 0;
  12.                         for(j = 0;j < 8;j++) //串行数据输入
  13.                         {
  14.                                 SER = 0;
  15.                                 delay_us(1);
  16.                                 SCK= 0;                  //上升沿,输入到移位寄存器
  17.                                 delay_us(1);               
  18.                                 SCK = 1;               
  19.                         }

  20.                         for(j  =0;j < 8;j++) //串行数据输入
  21.                         {
  22.                                 if(num & 0x80)
  23.                                         SER = 1;          // SER串行输入端口
  24.                                 else
  25.                                         SER = 0;
  26.                                 SCK = 0;                  //上升沿,输入到移位寄存器
  27.                                 delay_us(1);               
  28.                                 SCK = 1;               
  29.                                 num <<= 1;
  30.                         }
  31.                         Storey(a+i*8);//层填充函数,控制某层灯点亮方式
  32.                         RCK = 1;
  33.                         num=0x01;                        
  34. <font color="#ff0000">                        delay_ms(2);   // 层显示时间</font>
  35.                 }
  36.         }        
  37. }
复制代码
    是不是我们可以改变其它参数,间接的来改变动画速度,有的,请看红色字体那,层显示时间,我们改变它,也就间接的改变了每帧显示的时间,这样就达到了改变速度的目的。
   在led.c函数中我们声明一个全局变量:u8 GEAR = 4。 将delay_ms(2)改为delay_us(500 + (8-GEAR) * 250)。
   下面开始编写外部中断函数。
  1. #define KEY_DOWN PAin(6)  //PA6 速度减
  2. #define KEY_UP PAin(7)           //PA7 速度加
  3. void EXTIX_Init(void);//外部中断IO初始化
  4. //按键调速,共7个档位,调整光立方的运行数度
  5. //PA6,PA7外部中断输入端口,分别接驱动板的KEY1、KEY2
  6. //按下KEY1速度变慢,按下KEY2速度变快
  7. //外部中断服务函数
  8. void EXTI9_5_IRQHandler(void)
  9. {                        
  10. <font color="#ff0000">        delay_ms(1);    //消抖</font>                        
  11.         if(KEY_DOWN == 0)      //按键1
  12.         {
  13.             if(GEAR > 1 && GEAR < 8)
  14.                 {   
  15.                     -- GEAR;
  16.                         printf("%d\n",GEAR);
  17.                 }        
  18.         }
  19.         else if(KEY_UP == 0)//按键2
  20.         {
  21.                 if(GEAR > 0 && GEAR < 7)
  22.                 {
  23.                     ++ GEAR;
  24.                         printf("%d\n",GEAR);
  25.                 }
  26.         }
  27.         EXTI->PR = 1<<6;     //清除LINE6上的中断标志位  
  28.         EXTI->PR = 1<<7;     //清除LINE7上的中断标志位  
  29. }
  30. //外部中断初始化程序
  31. //初始化PA6,PA7为中断输入.
  32. void EXTIX_Init(void)
  33. {
  34.         RCC->APB2ENR |= 1<<2;     //使能PORTA时钟
  35.         JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD
  36.         GPIOA->CRL &= 0X00FFFFFF;//PA6,PA7设置成输入         
  37.         GPIOA->CRL |= 0X88000000;                                    
  38.         GPIOA->ODR |= 1<<6;           //PA6上拉
  39.         GPIOA->ODR |= 1<<7;           //PA7上拉
  40.         Ex_NVIC_Config( GPIO_A, 6, FTIR);//下降沿触发
  41.         Ex_NVIC_Config( GPIO_A, 7, FTIR);//下降沿触发
  42.         MY_NVIC_Init( 2, 1, EXTI9_5_IRQChannel, 2);//抢占2,子优先级1,组2           
  43. }
复制代码
通过上面的中断服务函数就可以实时改变GEAR的值了,需要注意的是消抖时间,这个时间不可很大,时间过长,按键中断时光立方就会出现“一闪”的现象。
回复 支持 反对

使用道具 举报

签到天数: 63 天

[LV.6]常住居民II

地板
 楼主| 发表于 2015-5-13 13:41:28 | 只看该作者
xiaochen 发表于 2015-5-13 09:49
请问有没有用arduino微控制器 控制8*8*8光立方的程序与接线图?

请您浏览:http://www.yfrobot.com/forum.php ... =%B9%E2%C1%A2%B7%BD
回复 支持 反对

使用道具 举报

签到天数: 63 天

[LV.6]常住居民II

5#
 楼主| 发表于 2015-5-14 14:18:34 | 只看该作者
xiaochen 发表于 2015-5-14 11:37
请问电路板上 L、R(左右声道模拟信号输出),K1、K2(按键输出信号)4个端口分别要接在arduino板上的哪里,也 ...

都需要自定义的,需要用到模拟量采集端口,将采集的数据进行傅立叶变换,得到不同频率所对应的幅值,这样就可以做成频谱了,具体请看光立方V1.3资料中《FFT结果的意义》,及fft.c。
  1. for(i=0;i<65;i++)
  2. {
  3.         dd[i].real=Get_Adc(ADC_CH0);          //读取ad结果;        
  4.         dd[i].imag=0;                //清零虚部
  5. }
复制代码
采集65个模拟值。


回复 支持 反对

使用道具 举报

签到天数: 63 天

[LV.6]常住居民II

6#
 楼主| 发表于 2015-5-14 17:28:51 | 只看该作者
xiaochen 发表于 2015-5-14 15:57
我浏览了你给我发的那网站里面的资料,可是为什么我用资料里面的arduino光立方程序执行起来看不出所写的效 ...

1楼底层 “光立方V1.3资料”,里面包含了程序,但是stm32的,需要修改。
给您介绍的帖子中有使用说明的,你可以先检查一下接线,然后尝试运行一个简单的动画,像全亮。
回复 支持 反对

使用道具 举报

签到天数: 7 天

[LV.3]偶尔看看II

7#
发表于 2015-5-15 17:33:50 | 只看该作者
xiaochen 发表于 2015-5-15 14:26
请问面与面我放在驱动板上的位置方向和你的不一样,这会影响到程序所写的效果吗?还是没有差别?麻烦你了, ...

会影响显示的,不过可以在595驱动函数中更改一下扫描方式就可以了
回复 支持 反对

使用道具 举报

签到天数: 63 天

[LV.6]常住居民II

8#
 楼主| 发表于 2015-5-18 08:21:10 | 只看该作者
xiaochen 发表于 2015-5-15 14:26
请问面与面我放在驱动板上的位置方向和你的不一样,这会影响到程序所写的效果吗?还是没有差别?麻烦你了, ...

会的,程序是根据硬件的连接方式来变成的,不同的连接方式,驱动函数也会不同,两者是相对应的。
回复 支持 反对

使用道具 举报

签到天数: 63 天

[LV.6]常住居民II

9#
 楼主| 发表于 2015-5-20 07:58:45 | 只看该作者
xiaochen 发表于 2015-5-19 17:03
那请问如果连接方式和帖子上的完全是一样的,就是直接把程序烧录就去就Ok了吗?还是要再进行编译?比如说 ...

程序需要根据不同单片机稍微改动的,也需要看一下主程序,命令了那些动作。
回复 支持 反对

使用道具 举报

签到天数: 63 天

[LV.6]常住居民II

10#
 楼主| 发表于 2015-5-21 12:58:22 | 只看该作者
xiaochen 发表于 2015-5-20 21:32
好的,谢谢,那请问我可以用上位机软件进行控制光立方吗?我的板和这个帖上的板是完全一样的,上机位软件 ...

目前上位机支持arduino的。这个贴中有较详细的说明http://www.yfrobot.com/forum.php ... =%B9%E2%C1%A2%B7%BD
回复 支持 反对

使用道具 举报

签到天数: 63 天

[LV.6]常住居民II

11#
 楼主| 发表于 2016-1-14 08:04:47 | 只看该作者
Sawada 发表于 2016-1-13 18:35
V1.3资料裡面可以用Arduino打開嗎,是用Arduino主控板控制吧

有的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|联系我们|YFROBOT ( 苏ICP备20009901号-2  

GMT+8, 2024-9-27 22:13 , Processed in 0.231494 second(s), 29 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表