For the 8x8x8 RGB LEDCube
Dependencies: 3DSnake CubeObj LEDCUBE_RGB_888 SPIShiftReg mbed
main.cpp@0:8d23c4730838, 2017-01-29 (annotated)
- 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?
User | Revision | Line number | New 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 | } |