Nick Lowyck / Mbed 2 deprecated Ledcube

Dependencies:   mbed mbed-rtos

Committer:
sNICKer1103
Date:
Thu May 08 18:59:52 2014 +0000
Revision:
5:e4ed6c5baf89
Parent:
4:a091b8f8216d
ter

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sNICKer1103 2:f2700008c9d9 1 #include "LedCube.h"
sNICKer1103 2:f2700008c9d9 2
sNICKer1103 2:f2700008c9d9 3 LedCube::LedCube(){
sNICKer1103 2:f2700008c9d9 4 //construct needed arrays to store the output values
sNICKer1103 2:f2700008c9d9 5 status = address;
sNICKer1103 5:e4ed6c5baf89 6 x_current=0;
sNICKer1103 5:e4ed6c5baf89 7 y_current=0;
sNICKer1103 5:e4ed6c5baf89 8 z_current=0;
sNICKer1103 2:f2700008c9d9 9
sNICKer1103 2:f2700008c9d9 10 layer_current=0;
sNICKer1103 5:e4ed6c5baf89 11 layer_oneHot= 1;
sNICKer1103 5:e4ed6c5baf89 12 rank_current = 0;
sNICKer1103 3:da30c350c339 13 }
sNICKer1103 2:f2700008c9d9 14 //return the next byte of data to send
sNICKer1103 5:e4ed6c5baf89 15 unsigned char LedCube::getNextValue(){
sNICKer1103 5:e4ed6c5baf89 16 unsigned char output;
sNICKer1103 2:f2700008c9d9 17 switch(status){
sNICKer1103 2:f2700008c9d9 18 case address :
sNICKer1103 5:e4ed6c5baf89 19 status=red;
sNICKer1103 5:e4ed6c5baf89 20 output = layer_oneHot;
sNICKer1103 2:f2700008c9d9 21 break;
sNICKer1103 2:f2700008c9d9 22 case red :
sNICKer1103 5:e4ed6c5baf89 23 output = rValues[layer_current][rank_current];//return red value
sNICKer1103 2:f2700008c9d9 24 if(rank_current!=7)rank_current++;
sNICKer1103 2:f2700008c9d9 25 else {
sNICKer1103 5:e4ed6c5baf89 26 status = green; // next time give red color
sNICKer1103 2:f2700008c9d9 27 rank_current =0; //put the rank back on zero
sNICKer1103 2:f2700008c9d9 28 }
sNICKer1103 2:f2700008c9d9 29 break;
sNICKer1103 2:f2700008c9d9 30 case green :
sNICKer1103 5:e4ed6c5baf89 31 output = gValues[layer_current][rank_current];//return green value
sNICKer1103 2:f2700008c9d9 32 if(rank_current!=7)rank_current++;
sNICKer1103 2:f2700008c9d9 33 else {
sNICKer1103 5:e4ed6c5baf89 34 status = blue; // next time give green color
sNICKer1103 2:f2700008c9d9 35 rank_current =0; //put the rank back on zero
sNICKer1103 2:f2700008c9d9 36 }
sNICKer1103 2:f2700008c9d9 37 break;
sNICKer1103 2:f2700008c9d9 38 case blue :
sNICKer1103 5:e4ed6c5baf89 39 output = bValues[layer_current][rank_current];//return blue value
sNICKer1103 5:e4ed6c5baf89 40 if (rank_current != 7){
sNICKer1103 5:e4ed6c5baf89 41 rank_current++; //increase the rank
sNICKer1103 5:e4ed6c5baf89 42 }
sNICKer1103 2:f2700008c9d9 43 else {
sNICKer1103 2:f2700008c9d9 44 layer_oneHot = layer_oneHot << 1;
sNICKer1103 5:e4ed6c5baf89 45 if(layer_oneHot == 0) layer_oneHot = 1; //get the new address
sNICKer1103 5:e4ed6c5baf89 46 status = address; // next time give blue color
sNICKer1103 5:e4ed6c5baf89 47 rank_current =0; //put the rank back on zero for the next layer
sNICKer1103 5:e4ed6c5baf89 48 if(layer_current!=7) layer_current++; else layer_current = 0; //if its not the last layer increase it
sNICKer1103 2:f2700008c9d9 49 }
sNICKer1103 2:f2700008c9d9 50 break;
sNICKer1103 2:f2700008c9d9 51 }
sNICKer1103 5:e4ed6c5baf89 52 return output;
sNICKer1103 2:f2700008c9d9 53 }
sNICKer1103 2:f2700008c9d9 54 //setData set the arrays to the new frame
sNICKer1103 5:e4ed6c5baf89 55 void LedCube::setData(unsigned char* data){
sNICKer1103 5:e4ed6c5baf89 56 //convert raw data too rgb values
sNICKer1103 5:e4ed6c5baf89 57 for(int i = 0; i < 8; i++) {
sNICKer1103 2:f2700008c9d9 58 int z = i * 64; // a layer is 64 byte
sNICKer1103 2:f2700008c9d9 59 for(int j = 0; j < 8; j++) {
sNICKer1103 5:e4ed6c5baf89 60 int y = j * 8; //a collum is 8 rows
sNICKer1103 5:e4ed6c5baf89 61 unsigned char weight = 128;
sNICKer1103 5:e4ed6c5baf89 62 for(int k = 0; k < 8; k++) { //iterate for each row
sNICKer1103 5:e4ed6c5baf89 63 unsigned char digitbuffer = data[z+y+k]; //read byte consisting of color 1 led
sNICKer1103 2:f2700008c9d9 64 //now select the right color
sNICKer1103 2:f2700008c9d9 65 if(k == 0) {
sNICKer1103 2:f2700008c9d9 66 rValues[i][j] = 0;
sNICKer1103 2:f2700008c9d9 67 gValues[i][j] = 0;
sNICKer1103 2:f2700008c9d9 68 bValues[i][j] = 0;
sNICKer1103 2:f2700008c9d9 69 }
sNICKer1103 2:f2700008c9d9 70 if(digitbuffer >= 4) {
sNICKer1103 2:f2700008c9d9 71 rValues[i][j] += weight;
sNICKer1103 2:f2700008c9d9 72 digitbuffer = digitbuffer - 4;
sNICKer1103 2:f2700008c9d9 73 }
sNICKer1103 2:f2700008c9d9 74 if(digitbuffer >= 2) {
sNICKer1103 2:f2700008c9d9 75 gValues[i][j] += weight;
sNICKer1103 2:f2700008c9d9 76 digitbuffer = digitbuffer - 2;
sNICKer1103 2:f2700008c9d9 77 }
sNICKer1103 2:f2700008c9d9 78 if(digitbuffer >= 1) {
sNICKer1103 2:f2700008c9d9 79 bValues[i][j] += weight;
sNICKer1103 2:f2700008c9d9 80 }
sNICKer1103 2:f2700008c9d9 81 weight = weight >> 1;
sNICKer1103 2:f2700008c9d9 82 }
sNICKer1103 2:f2700008c9d9 83 }
sNICKer1103 2:f2700008c9d9 84 }
sNICKer1103 3:da30c350c339 85 }
sNICKer1103 5:e4ed6c5baf89 86 void LedCube::printValues(Color_led color){
sNICKer1103 5:e4ed6c5baf89 87 unsigned char(*toprint)[8][8];
sNICKer1103 5:e4ed6c5baf89 88 switch (color)
sNICKer1103 5:e4ed6c5baf89 89 {
sNICKer1103 5:e4ed6c5baf89 90 case l_red:
sNICKer1103 5:e4ed6c5baf89 91 toprint = &rValues;
sNICKer1103 3:da30c350c339 92 break;
sNICKer1103 5:e4ed6c5baf89 93 case l_green:
sNICKer1103 5:e4ed6c5baf89 94 toprint = &gValues;
sNICKer1103 5:e4ed6c5baf89 95 break;
sNICKer1103 5:e4ed6c5baf89 96 case l_blue:
sNICKer1103 5:e4ed6c5baf89 97 toprint = &bValues;
sNICKer1103 5:e4ed6c5baf89 98 break;
sNICKer1103 5:e4ed6c5baf89 99 default:
sNICKer1103 5:e4ed6c5baf89 100 toprint = &rValues; //set the default to red should not happen anyway
sNICKer1103 3:da30c350c339 101 break;
sNICKer1103 3:da30c350c339 102 }
sNICKer1103 5:e4ed6c5baf89 103 for (int i = 0; i < 8; i++){
sNICKer1103 5:e4ed6c5baf89 104 for (int j = 0; j < 8; j++){
sNICKer1103 5:e4ed6c5baf89 105 printf("%03d ", (*toprint)[i][j]);
sNICKer1103 5:e4ed6c5baf89 106 }
sNICKer1103 5:e4ed6c5baf89 107 printf("\n\r");
sNICKer1103 3:da30c350c339 108 }
sNICKer1103 3:da30c350c339 109 }
sNICKer1103 3:da30c350c339 110 void LedCube::printAll(){
sNICKer1103 3:da30c350c339 111 printf("Red Matrix: \n\r");
sNICKer1103 5:e4ed6c5baf89 112 printValues(l_red);
sNICKer1103 3:da30c350c339 113 printf("\n\rGreen Matrix: \n\r");
sNICKer1103 5:e4ed6c5baf89 114 printValues(l_green);
sNICKer1103 3:da30c350c339 115 printf("\n\rBlue Matrix: \n\r");
sNICKer1103 5:e4ed6c5baf89 116 printValues(l_blue);
sNICKer1103 5:e4ed6c5baf89 117 }