For the 8x8x8 RGB LEDCube
LEDCUBE_RGB_888.cpp@0:1cb54c970448, 2017-01-29 (annotated)
- Committer:
- zgtk_r
- Date:
- Sun Jan 29 02:15:58 2017 +0000
- Revision:
- 0:1cb54c970448
For the 8x8x8 RGB LEDCube
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
zgtk_r | 0:1cb54c970448 | 1 | #include"LEDCUBE_RGB_888.h" |
zgtk_r | 0:1cb54c970448 | 2 | #include <math.h> |
zgtk_r | 0:1cb54c970448 | 3 | |
zgtk_r | 0:1cb54c970448 | 4 | SPIShiftReg SReg2(D11,D13,D10); //data, dclk, rck |
zgtk_r | 0:1cb54c970448 | 5 | SPIShiftReg SReg(PC_12,PC_10,D7); //data, dclk, rck |
zgtk_r | 0:1cb54c970448 | 6 | AnalogIn seed(A5); |
zgtk_r | 0:1cb54c970448 | 7 | |
zgtk_r | 0:1cb54c970448 | 8 | extern char VRam[64][3] = {0,0,0,}; |
zgtk_r | 0:1cb54c970448 | 9 | |
zgtk_r | 0:1cb54c970448 | 10 | char checkColor(char dat, int C, int i){ |
zgtk_r | 0:1cb54c970448 | 11 | if(C == i)return dat; |
zgtk_r | 0:1cb54c970448 | 12 | else return 0; |
zgtk_r | 0:1cb54c970448 | 13 | } |
zgtk_r | 0:1cb54c970448 | 14 | void IniVRam(char dat){ |
zgtk_r | 0:1cb54c970448 | 15 | for(int i = 0; i < 64; i++){ |
zgtk_r | 0:1cb54c970448 | 16 | for(int c = 0; c < 3; c++){ |
zgtk_r | 0:1cb54c970448 | 17 | VRam[i][c] = dat; |
zgtk_r | 0:1cb54c970448 | 18 | } |
zgtk_r | 0:1cb54c970448 | 19 | } |
zgtk_r | 0:1cb54c970448 | 20 | } |
zgtk_r | 0:1cb54c970448 | 21 | //VRamFunctions--------------------------------------- |
zgtk_r | 0:1cb54c970448 | 22 | int multiple(int i){ |
zgtk_r | 0:1cb54c970448 | 23 | if(i == 0)return 0; |
zgtk_r | 0:1cb54c970448 | 24 | int hoge = 1; |
zgtk_r | 0:1cb54c970448 | 25 | while(i % hoge){ |
zgtk_r | 0:1cb54c970448 | 26 | hoge++; |
zgtk_r | 0:1cb54c970448 | 27 | } |
zgtk_r | 0:1cb54c970448 | 28 | return hoge; |
zgtk_r | 0:1cb54c970448 | 29 | } |
zgtk_r | 0:1cb54c970448 | 30 | uint32_t GetV(uint8_t R, int8_t G, uint8_t B){ |
zgtk_r | 0:1cb54c970448 | 31 | return (R << 16) | (G << 8) | B; |
zgtk_r | 0:1cb54c970448 | 32 | } |
zgtk_r | 0:1cb54c970448 | 33 | COL GetColor(bool R, bool G, bool B){ |
zgtk_r | 0:1cb54c970448 | 34 | return (R << 2) | (G << 1) | B; |
zgtk_r | 0:1cb54c970448 | 35 | } |
zgtk_r | 0:1cb54c970448 | 36 | void PutPixel(int x, int y, int z, uint8_t Color){ |
zgtk_r | 0:1cb54c970448 | 37 | if(x <= -1 || x >= 8)return; |
zgtk_r | 0:1cb54c970448 | 38 | if(y <= -1 || y >= 8)return; |
zgtk_r | 0:1cb54c970448 | 39 | if(z <= -1 || z >= 8)return; |
zgtk_r | 0:1cb54c970448 | 40 | for(int i = 0; i <3; i++){ |
zgtk_r | 0:1cb54c970448 | 41 | if(Color & (1<<i))VRam[(x * 8) + y][i] |= 1 << z; |
zgtk_r | 0:1cb54c970448 | 42 | else VRam[(x * 8) + y][i] &= ~(1 << z); |
zgtk_r | 0:1cb54c970448 | 43 | } |
zgtk_r | 0:1cb54c970448 | 44 | } |
zgtk_r | 0:1cb54c970448 | 45 | void DrawLine(int x1, int y1, int z1, int x2, int y2, int z2, COL Color){ |
zgtk_r | 0:1cb54c970448 | 46 | |
zgtk_r | 0:1cb54c970448 | 47 | } |
zgtk_r | 0:1cb54c970448 | 48 | void DrawBox(int x1, int y1, int z1, int x2, int y2, int z2, COL Color, bool f){ |
zgtk_r | 0:1cb54c970448 | 49 | if(f) |
zgtk_r | 0:1cb54c970448 | 50 | for(int x = x1; x < x1+x2; x++){ |
zgtk_r | 0:1cb54c970448 | 51 | for(int y = y1; y < y1+y2; y++){ |
zgtk_r | 0:1cb54c970448 | 52 | for(int z = z1; z < z1+z2; z++){ |
zgtk_r | 0:1cb54c970448 | 53 | PutPixel(x, y, z, Color); |
zgtk_r | 0:1cb54c970448 | 54 | } |
zgtk_r | 0:1cb54c970448 | 55 | } |
zgtk_r | 0:1cb54c970448 | 56 | } |
zgtk_r | 0:1cb54c970448 | 57 | else |
zgtk_r | 0:1cb54c970448 | 58 | volatile int xx = 0, yy = 0, zz = 0; |
zgtk_r | 0:1cb54c970448 | 59 | for(int x = x1, xx = 0; x < x1+x2; x++, xx++){ |
zgtk_r | 0:1cb54c970448 | 60 | for(int y = y1, yy = 0; y < y1+y2; y++, yy++){ |
zgtk_r | 0:1cb54c970448 | 61 | for(int z = z1, zz = 0; z < z1+z2; z++, zz++){ |
zgtk_r | 0:1cb54c970448 | 62 | if(xx == yy && yy == zz && zz == xx)PutPixel(x, y, z, Color); |
zgtk_r | 0:1cb54c970448 | 63 | } |
zgtk_r | 0:1cb54c970448 | 64 | } |
zgtk_r | 0:1cb54c970448 | 65 | } |
zgtk_r | 0:1cb54c970448 | 66 | } |
zgtk_r | 0:1cb54c970448 | 67 | void DrawBall(float x, float y, float z, float r, COL Color, bool f){ |
zgtk_r | 0:1cb54c970448 | 68 | for(float xx = x-r; xx < x+r; xx++){ |
zgtk_r | 0:1cb54c970448 | 69 | for(float yy = y-r; yy < y+r; yy++){ |
zgtk_r | 0:1cb54c970448 | 70 | for(float zz = z-r; zz < z+r; zz++){ |
zgtk_r | 0:1cb54c970448 | 71 | float a = ((xx-x)*(xx-x) + (yy-y)*(yy-y) + (zz-z)*(zz-z)); |
zgtk_r | 0:1cb54c970448 | 72 | if(f){ |
zgtk_r | 0:1cb54c970448 | 73 | if(a < r*r )PutPixel(xx, yy, zz, Color); |
zgtk_r | 0:1cb54c970448 | 74 | } |
zgtk_r | 0:1cb54c970448 | 75 | else{ |
zgtk_r | 0:1cb54c970448 | 76 | if(a >= r*r-30 && a < r*r)PutPixel(xx, yy, zz, Color); |
zgtk_r | 0:1cb54c970448 | 77 | } |
zgtk_r | 0:1cb54c970448 | 78 | } |
zgtk_r | 0:1cb54c970448 | 79 | } |
zgtk_r | 0:1cb54c970448 | 80 | } |
zgtk_r | 0:1cb54c970448 | 81 | } |
zgtk_r | 0:1cb54c970448 | 82 | void ShiftVRam(ShiftType Type){ |
zgtk_r | 0:1cb54c970448 | 83 | switch(Type){ |
zgtk_r | 0:1cb54c970448 | 84 | case X_Plus : |
zgtk_r | 0:1cb54c970448 | 85 | for(int i = 55 ; i >= 0; i--){ |
zgtk_r | 0:1cb54c970448 | 86 | for(int j = 0;j < 3; j++){ |
zgtk_r | 0:1cb54c970448 | 87 | VRam[i+8][j] = VRam[i][j]; |
zgtk_r | 0:1cb54c970448 | 88 | } |
zgtk_r | 0:1cb54c970448 | 89 | } |
zgtk_r | 0:1cb54c970448 | 90 | for(int i = 0 ; i < 8; i++){ |
zgtk_r | 0:1cb54c970448 | 91 | for(int j = 0;j < 3; j++){ |
zgtk_r | 0:1cb54c970448 | 92 | VRam[i][j] = 0; |
zgtk_r | 0:1cb54c970448 | 93 | } |
zgtk_r | 0:1cb54c970448 | 94 | } |
zgtk_r | 0:1cb54c970448 | 95 | break; |
zgtk_r | 0:1cb54c970448 | 96 | case X_Minus : |
zgtk_r | 0:1cb54c970448 | 97 | for(int i = 0 ; i < 56; i++){ |
zgtk_r | 0:1cb54c970448 | 98 | for(int j = 0;j < 3; j++){ |
zgtk_r | 0:1cb54c970448 | 99 | VRam[i][j] = VRam[i+7][j]; |
zgtk_r | 0:1cb54c970448 | 100 | } |
zgtk_r | 0:1cb54c970448 | 101 | } |
zgtk_r | 0:1cb54c970448 | 102 | for(int i = 0 ; i < 8; i++){ |
zgtk_r | 0:1cb54c970448 | 103 | for(int j = 0;j < 3; j++){ |
zgtk_r | 0:1cb54c970448 | 104 | VRam[i][j] = 0; |
zgtk_r | 0:1cb54c970448 | 105 | } |
zgtk_r | 0:1cb54c970448 | 106 | } |
zgtk_r | 0:1cb54c970448 | 107 | break; |
zgtk_r | 0:1cb54c970448 | 108 | case Z_Plus : |
zgtk_r | 0:1cb54c970448 | 109 | for(int i = 0 ; i < 64; i++){ |
zgtk_r | 0:1cb54c970448 | 110 | for(int j = 0;j < 3; j++){ |
zgtk_r | 0:1cb54c970448 | 111 | VRam[i][j] = VRam[i][j] << 1; |
zgtk_r | 0:1cb54c970448 | 112 | } |
zgtk_r | 0:1cb54c970448 | 113 | } |
zgtk_r | 0:1cb54c970448 | 114 | break; |
zgtk_r | 0:1cb54c970448 | 115 | case Z_Minus : |
zgtk_r | 0:1cb54c970448 | 116 | for(int i = 0 ; i < 64; i++){ |
zgtk_r | 0:1cb54c970448 | 117 | for(int j = 0;j < 3; j++){ |
zgtk_r | 0:1cb54c970448 | 118 | VRam[i][j] = VRam[i][j] >> 1; |
zgtk_r | 0:1cb54c970448 | 119 | } |
zgtk_r | 0:1cb54c970448 | 120 | } |
zgtk_r | 0:1cb54c970448 | 121 | break; |
zgtk_r | 0:1cb54c970448 | 122 | } |
zgtk_r | 0:1cb54c970448 | 123 | } |
zgtk_r | 0:1cb54c970448 | 124 | //VerticalProcessings--------------------------------- |
zgtk_r | 0:1cb54c970448 | 125 | int VertCount = 0; |
zgtk_r | 0:1cb54c970448 | 126 | //uint64_t VertData = 1; |
zgtk_r | 0:1cb54c970448 | 127 | char VertDataArray[8] = { |
zgtk_r | 0:1cb54c970448 | 128 | 0,0,0,0,0,0,0,0 |
zgtk_r | 0:1cb54c970448 | 129 | }; |
zgtk_r | 0:1cb54c970448 | 130 | void IniVertArray(){ |
zgtk_r | 0:1cb54c970448 | 131 | for(int i = 0;i < 8; i++){ |
zgtk_r | 0:1cb54c970448 | 132 | VertDataArray[i] = 0; |
zgtk_r | 0:1cb54c970448 | 133 | } |
zgtk_r | 0:1cb54c970448 | 134 | } |
zgtk_r | 0:1cb54c970448 | 135 | void VertNext(){ |
zgtk_r | 0:1cb54c970448 | 136 | if(VertCount >= 64){ |
zgtk_r | 0:1cb54c970448 | 137 | VertCount = 0; |
zgtk_r | 0:1cb54c970448 | 138 | } |
zgtk_r | 0:1cb54c970448 | 139 | VertCount++; |
zgtk_r | 0:1cb54c970448 | 140 | } |
zgtk_r | 0:1cb54c970448 | 141 | void WriteVertData(){ |
zgtk_r | 0:1cb54c970448 | 142 | SReg2.write(VertDataArray, 8); |
zgtk_r | 0:1cb54c970448 | 143 | } |
zgtk_r | 0:1cb54c970448 | 144 | void vertUpData(){ |
zgtk_r | 0:1cb54c970448 | 145 | IniVertArray(); |
zgtk_r | 0:1cb54c970448 | 146 | VertDataArray[VertCount/8] = 1 << VertCount%8; |
zgtk_r | 0:1cb54c970448 | 147 | } |
zgtk_r | 0:1cb54c970448 | 148 | |
zgtk_r | 0:1cb54c970448 | 149 | //HorizonProcessings--------------------------------- |
zgtk_r | 0:1cb54c970448 | 150 | //BRG |
zgtk_r | 0:1cb54c970448 | 151 | char HorizData[3] = {0x00, 0x00, 0x00}; |
zgtk_r | 0:1cb54c970448 | 152 | void WriteHrizData(){ |
zgtk_r | 0:1cb54c970448 | 153 | SReg.write(HorizData, 3); |
zgtk_r | 0:1cb54c970448 | 154 | } |
zgtk_r | 0:1cb54c970448 | 155 | void horizUpData(bool F){ |
zgtk_r | 0:1cb54c970448 | 156 | if(F){ |
zgtk_r | 0:1cb54c970448 | 157 | for(int i = 0;i < 3; i++){ |
zgtk_r | 0:1cb54c970448 | 158 | HorizData[i] = VRam[VertCount][i]; |
zgtk_r | 0:1cb54c970448 | 159 | } |
zgtk_r | 0:1cb54c970448 | 160 | }else{ |
zgtk_r | 0:1cb54c970448 | 161 | for(int i = 0;i < 3; i++){ |
zgtk_r | 0:1cb54c970448 | 162 | HorizData[i] = 0; |
zgtk_r | 0:1cb54c970448 | 163 | } |
zgtk_r | 0:1cb54c970448 | 164 | } |
zgtk_r | 0:1cb54c970448 | 165 | } |
zgtk_r | 0:1cb54c970448 | 166 | |
zgtk_r | 0:1cb54c970448 | 167 | //FramePagingProcessings---------------------------------- |
zgtk_r | 0:1cb54c970448 | 168 | long Frame = 0; |
zgtk_r | 0:1cb54c970448 | 169 | bool UpdateFlag = false; |
zgtk_r | 0:1cb54c970448 | 170 | void FrameUpDate(bool F){ |
zgtk_r | 0:1cb54c970448 | 171 | if(VertCount != 64){ |
zgtk_r | 0:1cb54c970448 | 172 | WriteVertData(); |
zgtk_r | 0:1cb54c970448 | 173 | WriteHrizData(); |
zgtk_r | 0:1cb54c970448 | 174 | vertUpData(); |
zgtk_r | 0:1cb54c970448 | 175 | horizUpData(F); |
zgtk_r | 0:1cb54c970448 | 176 | if(F)VertNext(); |
zgtk_r | 0:1cb54c970448 | 177 | } |
zgtk_r | 0:1cb54c970448 | 178 | } |
zgtk_r | 0:1cb54c970448 | 179 | |
zgtk_r | 0:1cb54c970448 | 180 | void InitialScreen(int n, char data){ |
zgtk_r | 0:1cb54c970448 | 181 | int temp = VertCount; |
zgtk_r | 0:1cb54c970448 | 182 | VertCount = 0; |
zgtk_r | 0:1cb54c970448 | 183 | IniVRam(data); |
zgtk_r | 0:1cb54c970448 | 184 | for(int i = 0; i < n; i++){ |
zgtk_r | 0:1cb54c970448 | 185 | FrameUpDate(true); |
zgtk_r | 0:1cb54c970448 | 186 | } |
zgtk_r | 0:1cb54c970448 | 187 | VertCount = temp; |
zgtk_r | 0:1cb54c970448 | 188 | } |
zgtk_r | 0:1cb54c970448 | 189 | void Cls(){ |
zgtk_r | 0:1cb54c970448 | 190 | int temp = VertCount; |
zgtk_r | 0:1cb54c970448 | 191 | VertCount-=1; |
zgtk_r | 0:1cb54c970448 | 192 | FrameUpDate(false); |
zgtk_r | 0:1cb54c970448 | 193 | VertCount = temp; |
zgtk_r | 0:1cb54c970448 | 194 | } |
zgtk_r | 0:1cb54c970448 | 195 | |
zgtk_r | 0:1cb54c970448 | 196 | void CubeUpdata(){ |
zgtk_r | 0:1cb54c970448 | 197 | VertCount = 0; |
zgtk_r | 0:1cb54c970448 | 198 | for(int i = 0; i <= 64; i++){ |
zgtk_r | 0:1cb54c970448 | 199 | FrameUpDate(true); |
zgtk_r | 0:1cb54c970448 | 200 | Cls(); |
zgtk_r | 0:1cb54c970448 | 201 | } |
zgtk_r | 0:1cb54c970448 | 202 | } |