For the 8x8x8 RGB LEDCube

Dependencies:   3DSnake CubeObj LEDCUBE_RGB_888 SPIShiftReg mbed

Fork of 888LEDCUBE_RGB by tessecraft

Committer:
zgtk_r
Date:
Sun Jan 29 02:17:18 2017 +0000
Revision:
0:8d23c4730838
For the 8x8x8 RGB LEDCube

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zgtk_r 0:8d23c4730838 1 #include "mbed.h"
zgtk_r 0:8d23c4730838 2 #include "CubeObj.h"
zgtk_r 0:8d23c4730838 3 #include "FireWorkr.h"
zgtk_r 0:8d23c4730838 4 #include "3DSnake.h"
zgtk_r 0:8d23c4730838 5 #include<stdlib.h>
zgtk_r 0:8d23c4730838 6
zgtk_r 0:8d23c4730838 7 #define AnmeNum 6
zgtk_r 0:8d23c4730838 8
zgtk_r 0:8d23c4730838 9 int animeType = 0;
zgtk_r 0:8d23c4730838 10 int animeCount = 0;
zgtk_r 0:8d23c4730838 11 float amimationFrame[]={
zgtk_r 0:8d23c4730838 12 //BallImpact
zgtk_r 0:8d23c4730838 13 0.03,
zgtk_r 0:8d23c4730838 14 //FireWorks
zgtk_r 0:8d23c4730838 15 3,
zgtk_r 0:8d23c4730838 16 //Checks
zgtk_r 0:8d23c4730838 17 0.1,
zgtk_r 0:8d23c4730838 18 //Wave
zgtk_r 0:8d23c4730838 19 0.02,
zgtk_r 0:8d23c4730838 20 //Wave2
zgtk_r 0:8d23c4730838 21 0.02,
zgtk_r 0:8d23c4730838 22 //Snake
zgtk_r 0:8d23c4730838 23 0.1
zgtk_r 0:8d23c4730838 24 };
zgtk_r 0:8d23c4730838 25 int animationLoops[]={
zgtk_r 0:8d23c4730838 26 //BallImpact
zgtk_r 0:8d23c4730838 27 60,
zgtk_r 0:8d23c4730838 28 //FireWorks
zgtk_r 0:8d23c4730838 29 60,
zgtk_r 0:8d23c4730838 30 //Checks
zgtk_r 0:8d23c4730838 31 10,
zgtk_r 0:8d23c4730838 32 //Wave
zgtk_r 0:8d23c4730838 33 30,
zgtk_r 0:8d23c4730838 34 //Wave2
zgtk_r 0:8d23c4730838 35 30,
zgtk_r 0:8d23c4730838 36 //Snake
zgtk_r 0:8d23c4730838 37 60
zgtk_r 0:8d23c4730838 38 };
zgtk_r 0:8d23c4730838 39
zgtk_r 0:8d23c4730838 40 Fireworks FW;
zgtk_r 0:8d23c4730838 41 float c = 0;
zgtk_r 0:8d23c4730838 42 int x, y, z, dc;
zgtk_r 0:8d23c4730838 43
zgtk_r 0:8d23c4730838 44 Snake Snake_(4,4,4, 7, 5);
zgtk_r 0:8d23c4730838 45 int SnakeD = 0;
zgtk_r 0:8d23c4730838 46
zgtk_r 0:8d23c4730838 47 int CheckCount = 0;
zgtk_r 0:8d23c4730838 48
zgtk_r 0:8d23c4730838 49 Ticker animationTime;
zgtk_r 0:8d23c4730838 50 Ticker frameud;
zgtk_r 0:8d23c4730838 51 Ticker FShotT;
zgtk_r 0:8d23c4730838 52 InterruptIn BPush(USER_BUTTON);
zgtk_r 0:8d23c4730838 53 bool ShotFlag = true;
zgtk_r 0:8d23c4730838 54 void Shot();
zgtk_r 0:8d23c4730838 55 void animeTimeCount(){
zgtk_r 0:8d23c4730838 56 animeCount++;
zgtk_r 0:8d23c4730838 57 if(animeCount > animationLoops[animeType]){
zgtk_r 0:8d23c4730838 58 Snake_.color[1] = rand()%7+1;
zgtk_r 0:8d23c4730838 59 animeCount = 0;
zgtk_r 0:8d23c4730838 60 animeType = rand() % AnmeNum;
zgtk_r 0:8d23c4730838 61 dc = rand() % 7 + 1;
zgtk_r 0:8d23c4730838 62 FShotT.attach(&Shot, amimationFrame[animeType]);
zgtk_r 0:8d23c4730838 63 }
zgtk_r 0:8d23c4730838 64
zgtk_r 0:8d23c4730838 65 }
zgtk_r 0:8d23c4730838 66 void Shot(){
zgtk_r 0:8d23c4730838 67 switch(animeType){
zgtk_r 0:8d23c4730838 68 //BallImpact----------------------------
zgtk_r 0:8d23c4730838 69 case 0 :
zgtk_r 0:8d23c4730838 70 c+=0.5f;
zgtk_r 0:8d23c4730838 71 if(c >= 16){
zgtk_r 0:8d23c4730838 72 c = 0;
zgtk_r 0:8d23c4730838 73 x = rand() % 8;
zgtk_r 0:8d23c4730838 74 y = rand() % 8;
zgtk_r 0:8d23c4730838 75 z = rand() % 8;
zgtk_r 0:8d23c4730838 76 dc = rand() % 7 + 1;
zgtk_r 0:8d23c4730838 77 }
zgtk_r 0:8d23c4730838 78 break;
zgtk_r 0:8d23c4730838 79 //FireWorks-----------------------------
zgtk_r 0:8d23c4730838 80 case 1 :
zgtk_r 0:8d23c4730838 81 ShotFlag = true;
zgtk_r 0:8d23c4730838 82 break;
zgtk_r 0:8d23c4730838 83 //Checks--------------------------------
zgtk_r 0:8d23c4730838 84 case 2 :
zgtk_r 0:8d23c4730838 85 CheckCount++;
zgtk_r 0:8d23c4730838 86 if(CheckCount > 8 * 3 * 3)CheckCount = 0;
zgtk_r 0:8d23c4730838 87 break;
zgtk_r 0:8d23c4730838 88 //Wave--------------------------------
zgtk_r 0:8d23c4730838 89 case 3 :
zgtk_r 0:8d23c4730838 90 if(CheckCount%2 == 0)ShiftVRam(Z_Minus);
zgtk_r 0:8d23c4730838 91 CheckCount++;
zgtk_r 0:8d23c4730838 92 if(CheckCount >= 32)CheckCount = 0;
zgtk_r 0:8d23c4730838 93 break;
zgtk_r 0:8d23c4730838 94 //Wave2--------------------------------
zgtk_r 0:8d23c4730838 95 case 4 :
zgtk_r 0:8d23c4730838 96 if(CheckCount%2 == 0)ShiftVRam(X_Plus);
zgtk_r 0:8d23c4730838 97 CheckCount++;
zgtk_r 0:8d23c4730838 98 if(CheckCount >= 32)CheckCount = 0;
zgtk_r 0:8d23c4730838 99 break;
zgtk_r 0:8d23c4730838 100 //Snake--------------------------------
zgtk_r 0:8d23c4730838 101 case 5 :
zgtk_r 0:8d23c4730838 102 if(rand()%2 == 0)SnakeD = rand()%12;
zgtk_r 0:8d23c4730838 103 Snake_.moveBody();
zgtk_r 0:8d23c4730838 104 Snake_.moveHead(SnakeD);
zgtk_r 0:8d23c4730838 105 break;
zgtk_r 0:8d23c4730838 106
zgtk_r 0:8d23c4730838 107 }
zgtk_r 0:8d23c4730838 108 }
zgtk_r 0:8d23c4730838 109 int S[32] = {4.780361288,5.530733729,6.222280932,6.828427125,7.325878449,7.69551813,7.923141122,8,7.923141122,7.69551813,7.325878449,6.828427125,6.222280932,5.530733729,4.780361288,4,3.219638712,2.469266271,1.777719068,1.171572875,0.674121551,0.30448187,0.076858878,0,0.076858878,0.30448187,0.674121551,1.171572875,1.777719068,2.469266271,3.219638712,4};
zgtk_r 0:8d23c4730838 110 void MainPrs(){
zgtk_r 0:8d23c4730838 111 switch(animeType){
zgtk_r 0:8d23c4730838 112 //BallImpact----------------------------
zgtk_r 0:8d23c4730838 113 case 0 :
zgtk_r 0:8d23c4730838 114 IniVRam(0);
zgtk_r 0:8d23c4730838 115 DrawBall(x,y,z, c, dc, false);
zgtk_r 0:8d23c4730838 116 break;
zgtk_r 0:8d23c4730838 117 //FireWorks-----------------------------
zgtk_r 0:8d23c4730838 118 case 1 :
zgtk_r 0:8d23c4730838 119 IniVRam(0);
zgtk_r 0:8d23c4730838 120 if(ShotFlag){
zgtk_r 0:8d23c4730838 121 ShotFlag = false;
zgtk_r 0:8d23c4730838 122 FW.isWork = false;
zgtk_r 0:8d23c4730838 123 FW.SetColor(rand()%7+1, rand()%7+1);
zgtk_r 0:8d23c4730838 124 FW.put(rand()%8, rand()%8, rand()%4+4);
zgtk_r 0:8d23c4730838 125
zgtk_r 0:8d23c4730838 126 }
zgtk_r 0:8d23c4730838 127 else
zgtk_r 0:8d23c4730838 128 FW.Update();
zgtk_r 0:8d23c4730838 129 break;
zgtk_r 0:8d23c4730838 130 //Checks--------------------------------
zgtk_r 0:8d23c4730838 131 case 2 :
zgtk_r 0:8d23c4730838 132 IniVRam(0);
zgtk_r 0:8d23c4730838 133 int aa = CheckCount%8;
zgtk_r 0:8d23c4730838 134 COL cx;
zgtk_r 0:8d23c4730838 135 switch((CheckCount/8) % 3){
zgtk_r 0:8d23c4730838 136 case 0 :
zgtk_r 0:8d23c4730838 137 cx = GetColor(1,0,0);
zgtk_r 0:8d23c4730838 138 break;
zgtk_r 0:8d23c4730838 139 case 1 :
zgtk_r 0:8d23c4730838 140 cx = GetColor(0,1,0);
zgtk_r 0:8d23c4730838 141 break;
zgtk_r 0:8d23c4730838 142 case 2 :
zgtk_r 0:8d23c4730838 143 cx = GetColor(0,0,1);
zgtk_r 0:8d23c4730838 144 break;
zgtk_r 0:8d23c4730838 145 }
zgtk_r 0:8d23c4730838 146 switch(CheckCount/(8*3)){
zgtk_r 0:8d23c4730838 147 case 0 :
zgtk_r 0:8d23c4730838 148 DrawBox(aa, 0, 0, 1, 8, 8, cx, true);
zgtk_r 0:8d23c4730838 149 break;
zgtk_r 0:8d23c4730838 150 case 1 :
zgtk_r 0:8d23c4730838 151 DrawBox(0, aa, 0, 8, 1, 8, cx, true);
zgtk_r 0:8d23c4730838 152 break;
zgtk_r 0:8d23c4730838 153 case 2 :
zgtk_r 0:8d23c4730838 154 DrawBox(0, 0, aa, 8, 8, 1, cx, true);
zgtk_r 0:8d23c4730838 155 break;
zgtk_r 0:8d23c4730838 156 }
zgtk_r 0:8d23c4730838 157 break;
zgtk_r 0:8d23c4730838 158 //Wave----------------------------------
zgtk_r 0:8d23c4730838 159 case 3 :
zgtk_r 0:8d23c4730838 160 if(dc % 3 == 0){
zgtk_r 0:8d23c4730838 161 DrawBox(S[CheckCount],0,7, 1,8,1, dc,true);
zgtk_r 0:8d23c4730838 162 }else if(dc % 3 == 1){
zgtk_r 0:8d23c4730838 163 DrawBox(0,S[CheckCount],7, 8,1,1, dc,true);
zgtk_r 0:8d23c4730838 164 }else if(dc % 3 == 2){
zgtk_r 0:8d23c4730838 165 for(int i = 0; i < 8; i++)PutPixel((int)S[(CheckCount + (i*2))%32],i,7, dc);
zgtk_r 0:8d23c4730838 166 }
zgtk_r 0:8d23c4730838 167 break;
zgtk_r 0:8d23c4730838 168 //Wave2---------------------------------
zgtk_r 0:8d23c4730838 169 case 4 :
zgtk_r 0:8d23c4730838 170 int S[32] = {4.780361288,5.530733729,6.222280932,6.828427125,7.325878449,7.69551813,7.923141122,8,7.923141122,7.69551813,7.325878449,6.828427125,6.222280932,5.530733729,4.780361288,4,3.219638712,2.469266271,1.777719068,1.171572875,0.674121551,0.30448187,0.076858878,0,0.076858878,0.30448187,0.674121551,1.171572875,1.777719068,2.469266271,3.219638712,4};
zgtk_r 0:8d23c4730838 171 for(int i = 0; i < 8; i++)PutPixel(0,i,(int)S[(CheckCount + (i*2))%32], dc);
zgtk_r 0:8d23c4730838 172 break;
zgtk_r 0:8d23c4730838 173 //Snake---------------------------------
zgtk_r 0:8d23c4730838 174 case 5 :
zgtk_r 0:8d23c4730838 175 IniVRam(0);
zgtk_r 0:8d23c4730838 176 Snake_.drawHB();
zgtk_r 0:8d23c4730838 177 break;
zgtk_r 0:8d23c4730838 178 }
zgtk_r 0:8d23c4730838 179 }
zgtk_r 0:8d23c4730838 180 void PushButton(){
zgtk_r 0:8d23c4730838 181 animeType++;
zgtk_r 0:8d23c4730838 182 if(animeType >= AnmeNum)animeType = 0;
zgtk_r 0:8d23c4730838 183 animeCount = 0;
zgtk_r 0:8d23c4730838 184 dc = rand() % 7 + 1;
zgtk_r 0:8d23c4730838 185 FShotT.attach(&Shot, amimationFrame[animeType]);
zgtk_r 0:8d23c4730838 186 }
zgtk_r 0:8d23c4730838 187 int main(void) {
zgtk_r 0:8d23c4730838 188 frameud.attach(&MainPrs, 0.01);
zgtk_r 0:8d23c4730838 189 FShotT.attach(&Shot, amimationFrame[animeType]);
zgtk_r 0:8d23c4730838 190 animationTime.attach(&animeTimeCount,1);
zgtk_r 0:8d23c4730838 191 BPush.fall(&PushButton);
zgtk_r 0:8d23c4730838 192 while(1){
zgtk_r 0:8d23c4730838 193 CubeUpdata();
zgtk_r 0:8d23c4730838 194 }
zgtk_r 0:8d23c4730838 195 }