Nick Lowyck / Mbed 2 deprecated Ledcube

Dependencies:   mbed mbed-rtos

Committer:
sNICKer1103
Date:
Fri May 02 18:26:40 2014 +0000
Revision:
3:da30c350c339
Parent:
2:f2700008c9d9
Child:
4:a091b8f8216d
Refactoring part 2

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 2:f2700008c9d9 6
sNICKer1103 2:f2700008c9d9 7 layer_current=0;
sNICKer1103 2:f2700008c9d9 8 rank_current=0;
sNICKer1103 2:f2700008c9d9 9 layer_oneHot=1;
sNICKer1103 2:f2700008c9d9 10 }
sNICKer1103 3:da30c350c339 11
sNICKer1103 3:da30c350c339 12 LedCube::~LedCube(){
sNICKer1103 3:da30c350c339 13 }
sNICKer1103 3:da30c350c339 14
sNICKer1103 2:f2700008c9d9 15 //return the next byte of data to send
sNICKer1103 2:f2700008c9d9 16 char LedCube::getNextValue(){
sNICKer1103 2:f2700008c9d9 17
sNICKer1103 3:da30c350c339 18 char bytevalue;
sNICKer1103 2:f2700008c9d9 19 switch(status){
sNICKer1103 2:f2700008c9d9 20 case address :
sNICKer1103 3:da30c350c339 21 bytevalue = layer_oneHot;
sNICKer1103 2:f2700008c9d9 22 status=red; // next time give red color
sNICKer1103 2:f2700008c9d9 23 break;
sNICKer1103 2:f2700008c9d9 24 case red :
sNICKer1103 3:da30c350c339 25 bytevalue = rValues[layer_current][rank_current];//return red value
sNICKer1103 2:f2700008c9d9 26 if(rank_current!=7)rank_current++;
sNICKer1103 2:f2700008c9d9 27 else {
sNICKer1103 2:f2700008c9d9 28 status = green; // next time give green color
sNICKer1103 2:f2700008c9d9 29 rank_current =0; //put the rank back on zero
sNICKer1103 2:f2700008c9d9 30 }
sNICKer1103 2:f2700008c9d9 31 break;
sNICKer1103 2:f2700008c9d9 32 case green :
sNICKer1103 3:da30c350c339 33 bytevalue = gValues[layer_current][rank_current];//return green value
sNICKer1103 2:f2700008c9d9 34 if(rank_current!=7)rank_current++;
sNICKer1103 2:f2700008c9d9 35 else {
sNICKer1103 2:f2700008c9d9 36 status = blue; // next time give blue color
sNICKer1103 2:f2700008c9d9 37 rank_current =0; //put the rank back on zero
sNICKer1103 2:f2700008c9d9 38 }
sNICKer1103 2:f2700008c9d9 39 break;
sNICKer1103 2:f2700008c9d9 40 case blue :
sNICKer1103 3:da30c350c339 41 bytevalue = bValues[layer_current][rank_current];//return blue value
sNICKer1103 2:f2700008c9d9 42 if(rank_current!=7)rank_current++;
sNICKer1103 2:f2700008c9d9 43 else {
sNICKer1103 2:f2700008c9d9 44 status = address; // next time give address color
sNICKer1103 2:f2700008c9d9 45 rank_current =0; //put the rank back on zero
sNICKer1103 2:f2700008c9d9 46 layer_oneHot = layer_oneHot << 1;
sNICKer1103 2:f2700008c9d9 47 if(layer_current!=7)layer_current++;
sNICKer1103 2:f2700008c9d9 48 else layer_current=0;
sNICKer1103 2:f2700008c9d9 49 if(layer_oneHot == 0) layer_oneHot = 1;
sNICKer1103 2:f2700008c9d9 50 }
sNICKer1103 2:f2700008c9d9 51 break;
sNICKer1103 2:f2700008c9d9 52 }
sNICKer1103 3:da30c350c339 53 return bytevalue;
sNICKer1103 2:f2700008c9d9 54 }
sNICKer1103 2:f2700008c9d9 55 //setData set the arrays to the new frame
sNICKer1103 2:f2700008c9d9 56 void LedCube::setData(char* data){
sNICKer1103 3:da30c350c339 57 printf("Converting following data: \n\r");
sNICKer1103 3:da30c350c339 58 for(int i = 0; i < 512; i++) printf("%d ", data[i]);
sNICKer1103 3:da30c350c339 59 printf("\n\r\n\r");
sNICKer1103 3:da30c350c339 60
sNICKer1103 2:f2700008c9d9 61 //convert raw data to rgb values
sNICKer1103 2:f2700008c9d9 62 for(int i = 0; i < 8; i++) { //char array (afkomstig van raspberry pi) omzetten naar rgb matrix (voor ledcube)
sNICKer1103 2:f2700008c9d9 63 int z = i * 64; // a layer is 64 byte
sNICKer1103 2:f2700008c9d9 64 for(int j = 0; j < 8; j++) {
sNICKer1103 2:f2700008c9d9 65 int y = j * 8; //a row is 8 elements
sNICKer1103 2:f2700008c9d9 66 char weight = 128;
sNICKer1103 2:f2700008c9d9 67 for(int k = 0; k < 8; k++) { //iterate for each element
sNICKer1103 2:f2700008c9d9 68 char digitbuffer = data[z+y+k]; //read byte consisting of color 1 led
sNICKer1103 2:f2700008c9d9 69 //now select the right color
sNICKer1103 2:f2700008c9d9 70 if(k == 0) {
sNICKer1103 2:f2700008c9d9 71 rValues[i][j] = 0;
sNICKer1103 2:f2700008c9d9 72 gValues[i][j] = 0;
sNICKer1103 2:f2700008c9d9 73 bValues[i][j] = 0;
sNICKer1103 2:f2700008c9d9 74 }
sNICKer1103 2:f2700008c9d9 75 if(digitbuffer >= 4) {
sNICKer1103 2:f2700008c9d9 76 rValues[i][j] += weight;
sNICKer1103 2:f2700008c9d9 77 digitbuffer = digitbuffer - 4;
sNICKer1103 2:f2700008c9d9 78 }
sNICKer1103 2:f2700008c9d9 79 if(digitbuffer >= 2) {
sNICKer1103 2:f2700008c9d9 80 gValues[i][j] += weight;
sNICKer1103 2:f2700008c9d9 81 digitbuffer = digitbuffer - 2;
sNICKer1103 2:f2700008c9d9 82 }
sNICKer1103 2:f2700008c9d9 83 if(digitbuffer >= 1) {
sNICKer1103 2:f2700008c9d9 84 bValues[i][j] += weight;
sNICKer1103 2:f2700008c9d9 85 }
sNICKer1103 2:f2700008c9d9 86 weight = weight >> 1;
sNICKer1103 2:f2700008c9d9 87 }
sNICKer1103 2:f2700008c9d9 88 }
sNICKer1103 2:f2700008c9d9 89 }
sNICKer1103 3:da30c350c339 90 printf("Result: \n\r");
sNICKer1103 3:da30c350c339 91 printAll();
sNICKer1103 3:da30c350c339 92 printf("Conversion terminated\n\r");
sNICKer1103 3:da30c350c339 93 }
sNICKer1103 3:da30c350c339 94
sNICKer1103 3:da30c350c339 95 void LedCube::testMode(TestConfig testconfig){
sNICKer1103 3:da30c350c339 96 char leddata[512];
sNICKer1103 3:da30c350c339 97 switch(testconfig){
sNICKer1103 3:da30c350c339 98 case LedCube::firsthalfwhite :
sNICKer1103 3:da30c350c339 99 for(int i = 0; i < 256; i++) leddata[i] = 7;
sNICKer1103 3:da30c350c339 100 for(int i = 256; i < 512; i++) leddata[i] = 0;
sNICKer1103 3:da30c350c339 101 break;
sNICKer1103 3:da30c350c339 102 case LedCube::secondhalfwhite :
sNICKer1103 3:da30c350c339 103 for(int i = 0; i < 256; i++) leddata[i] = 0;
sNICKer1103 3:da30c350c339 104 for(int i = 256; i < 512; i++) leddata[i] = 7;
sNICKer1103 3:da30c350c339 105 break;
sNICKer1103 3:da30c350c339 106 }
sNICKer1103 3:da30c350c339 107 setData(leddata);
sNICKer1103 2:f2700008c9d9 108 }
sNICKer1103 2:f2700008c9d9 109
sNICKer1103 3:da30c350c339 110 void LedCube::printrValues(){
sNICKer1103 3:da30c350c339 111 for(int i = 0; i < 8; i ++){
sNICKer1103 3:da30c350c339 112 for(int j = 0; j < 8; j++){
sNICKer1103 3:da30c350c339 113 printf("%d ", rValues[i][j]);
sNICKer1103 3:da30c350c339 114 }
sNICKer1103 3:da30c350c339 115 printf("\n\r");
sNICKer1103 3:da30c350c339 116 }
sNICKer1103 3:da30c350c339 117 }
sNICKer1103 3:da30c350c339 118
sNICKer1103 3:da30c350c339 119 void LedCube::printgValues(){
sNICKer1103 3:da30c350c339 120 for(int i = 0; i < 8; i ++){
sNICKer1103 3:da30c350c339 121 for(int j = 0; j < 8; j++){
sNICKer1103 3:da30c350c339 122 printf("%d ", gValues[i][j]);
sNICKer1103 3:da30c350c339 123 }
sNICKer1103 3:da30c350c339 124 printf("\n\r");
sNICKer1103 3:da30c350c339 125 }
sNICKer1103 2:f2700008c9d9 126 }
sNICKer1103 2:f2700008c9d9 127
sNICKer1103 3:da30c350c339 128 void LedCube::printbValues(){
sNICKer1103 3:da30c350c339 129 for(int i = 0; i < 8; i ++){
sNICKer1103 3:da30c350c339 130 for(int j = 0; j < 8; j++){
sNICKer1103 3:da30c350c339 131 printf("%d ", bValues[i][j]);
sNICKer1103 3:da30c350c339 132 }
sNICKer1103 3:da30c350c339 133 printf("\n\r");
sNICKer1103 3:da30c350c339 134 }
sNICKer1103 3:da30c350c339 135 }
sNICKer1103 3:da30c350c339 136
sNICKer1103 3:da30c350c339 137 void LedCube::printAll(){
sNICKer1103 3:da30c350c339 138 printf("Red Matrix: \n\r");
sNICKer1103 3:da30c350c339 139 printrValues();
sNICKer1103 3:da30c350c339 140 printf("\n\rGreen Matrix: \n\r");
sNICKer1103 3:da30c350c339 141 printgValues();
sNICKer1103 3:da30c350c339 142 printf("\n\rBlue Matrix: \n\r");
sNICKer1103 3:da30c350c339 143 printbValues();
sNICKer1103 3:da30c350c339 144 }