Nick Lowyck / Mbed 2 deprecated Ledcube

Dependencies:   mbed mbed-rtos

Committer:
sNICKer1103
Date:
Sun May 04 20:41:10 2014 +0000
Revision:
4:a091b8f8216d
Parent:
3:da30c350c339
Child:
5:e4ed6c5baf89
Refactoring part 3

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