Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Cube/LedCube.cpp@4:a091b8f8216d, 2014-05-04 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |