For the 8x8x8 RGB LEDCube

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?

UserRevisionLine numberNew 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 }