For the 8x8x8 RGB LEDCube
Dependencies: 3DSnake CubeObj LEDCUBE_RGB_888 SPIShiftReg mbed
Fork of 888LEDCUBE_RGB by
Diff: main.cpp
- Revision:
- 0:8d23c4730838
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Jan 29 02:17:18 2017 +0000 @@ -0,0 +1,195 @@ +#include "mbed.h" +#include "CubeObj.h" +#include "FireWorkr.h" +#include "3DSnake.h" +#include<stdlib.h> + +#define AnmeNum 6 + +int animeType = 0; +int animeCount = 0; +float amimationFrame[]={ + //BallImpact + 0.03, + //FireWorks + 3, + //Checks + 0.1, + //Wave + 0.02, + //Wave2 + 0.02, + //Snake + 0.1 +}; +int animationLoops[]={ + //BallImpact + 60, + //FireWorks + 60, + //Checks + 10, + //Wave + 30, + //Wave2 + 30, + //Snake + 60 +}; + +Fireworks FW; +float c = 0; +int x, y, z, dc; + +Snake Snake_(4,4,4, 7, 5); +int SnakeD = 0; + +int CheckCount = 0; + +Ticker animationTime; +Ticker frameud; +Ticker FShotT; +InterruptIn BPush(USER_BUTTON); +bool ShotFlag = true; +void Shot(); +void animeTimeCount(){ + animeCount++; + if(animeCount > animationLoops[animeType]){ + Snake_.color[1] = rand()%7+1; + animeCount = 0; + animeType = rand() % AnmeNum; + dc = rand() % 7 + 1; + FShotT.attach(&Shot, amimationFrame[animeType]); + } + +} +void Shot(){ + switch(animeType){ + //BallImpact---------------------------- + case 0 : + c+=0.5f; + if(c >= 16){ + c = 0; + x = rand() % 8; + y = rand() % 8; + z = rand() % 8; + dc = rand() % 7 + 1; + } + break; + //FireWorks----------------------------- + case 1 : + ShotFlag = true; + break; + //Checks-------------------------------- + case 2 : + CheckCount++; + if(CheckCount > 8 * 3 * 3)CheckCount = 0; + break; + //Wave-------------------------------- + case 3 : + if(CheckCount%2 == 0)ShiftVRam(Z_Minus); + CheckCount++; + if(CheckCount >= 32)CheckCount = 0; + break; + //Wave2-------------------------------- + case 4 : + if(CheckCount%2 == 0)ShiftVRam(X_Plus); + CheckCount++; + if(CheckCount >= 32)CheckCount = 0; + break; + //Snake-------------------------------- + case 5 : + if(rand()%2 == 0)SnakeD = rand()%12; + Snake_.moveBody(); + Snake_.moveHead(SnakeD); + break; + + } +} + 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}; +void MainPrs(){ + switch(animeType){ + //BallImpact---------------------------- + case 0 : + IniVRam(0); + DrawBall(x,y,z, c, dc, false); + break; + //FireWorks----------------------------- + case 1 : + IniVRam(0); + if(ShotFlag){ + ShotFlag = false; + FW.isWork = false; + FW.SetColor(rand()%7+1, rand()%7+1); + FW.put(rand()%8, rand()%8, rand()%4+4); + + } + else + FW.Update(); + break; + //Checks-------------------------------- + case 2 : + IniVRam(0); + int aa = CheckCount%8; + COL cx; + switch((CheckCount/8) % 3){ + case 0 : + cx = GetColor(1,0,0); + break; + case 1 : + cx = GetColor(0,1,0); + break; + case 2 : + cx = GetColor(0,0,1); + break; + } + switch(CheckCount/(8*3)){ + case 0 : + DrawBox(aa, 0, 0, 1, 8, 8, cx, true); + break; + case 1 : + DrawBox(0, aa, 0, 8, 1, 8, cx, true); + break; + case 2 : + DrawBox(0, 0, aa, 8, 8, 1, cx, true); + break; + } + break; + //Wave---------------------------------- + case 3 : + if(dc % 3 == 0){ + DrawBox(S[CheckCount],0,7, 1,8,1, dc,true); + }else if(dc % 3 == 1){ + DrawBox(0,S[CheckCount],7, 8,1,1, dc,true); + }else if(dc % 3 == 2){ + for(int i = 0; i < 8; i++)PutPixel((int)S[(CheckCount + (i*2))%32],i,7, dc); + } + break; + //Wave2--------------------------------- + case 4 : + 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}; + for(int i = 0; i < 8; i++)PutPixel(0,i,(int)S[(CheckCount + (i*2))%32], dc); + break; + //Snake--------------------------------- + case 5 : + IniVRam(0); + Snake_.drawHB(); + break; + } +} +void PushButton(){ + animeType++; + if(animeType >= AnmeNum)animeType = 0; + animeCount = 0; + dc = rand() % 7 + 1; + FShotT.attach(&Shot, amimationFrame[animeType]); +} +int main(void) { + frameud.attach(&MainPrs, 0.01); + FShotT.attach(&Shot, amimationFrame[animeType]); + animationTime.attach(&animeTimeCount,1); + BPush.fall(&PushButton); + while(1){ + CubeUpdata(); + } +} \ No newline at end of file