Nick Lowyck / Mbed 2 deprecated Ledcube

Dependencies:   mbed mbed-rtos

Revision:
5:e4ed6c5baf89
Parent:
4:a091b8f8216d
diff -r a091b8f8216d -r e4ed6c5baf89 Cube/LedCube.cpp
--- a/Cube/LedCube.cpp	Sun May 04 20:41:10 2014 +0000
+++ b/Cube/LedCube.cpp	Thu May 08 18:59:52 2014 +0000
@@ -3,81 +3,64 @@
 LedCube::LedCube(){
     //construct needed arrays to store the output values
     status = address;
+    x_current=0;
+    y_current=0;
+    z_current=0;
     
     layer_current=0; 
-    rank_current=0;
-    layer_oneHot=1;
-    
-    clearValues();
-}
-
-LedCube::~LedCube(){
+    layer_oneHot= 1;
+    rank_current = 0;
 }
-
-void LedCube::clearValues(){
-    for(int i = 0; i < 8; i++){
-        for(int j = 0; j < 8; j++){
-            rValues[i][j] = 0;
-            gValues[i][j] = 0;
-            bValues[i][j] = 0;    
-        }
-    }
-}
-
 //return the next byte of data to send
-char LedCube::getNextValue(){
-
-    char bytevalue;
+unsigned char LedCube::getNextValue(){
+    unsigned char output;
     switch(status){
         case address  :
-           bytevalue = layer_oneHot;
-           status=red;  // next time give red color 
+           status=red;
+           output = layer_oneHot;
            break;
         case red  :
-           bytevalue = rValues[layer_current][rank_current];//return red value
+           output = rValues[layer_current][rank_current];//return red value
            if(rank_current!=7)rank_current++;
            else {
-                status = green; // next time give green color 
+                status = green; // next time give red color 
                 rank_current =0; //put the rank back on zero
            }
            break;      
         case green  :
-           bytevalue = gValues[layer_current][rank_current];//return green value
+           output = gValues[layer_current][rank_current];//return green value
            if(rank_current!=7)rank_current++;
            else {
-                status = blue; // next time give blue color 
+                status = blue; // next time give green color 
                 rank_current =0; //put the rank back on zero
            }
            break;      
         case blue  :
-           bytevalue = bValues[layer_current][rank_current];//return blue value
-           if(rank_current!=7)rank_current++;
+           output = bValues[layer_current][rank_current];//return blue value
+           if (rank_current != 7){ 
+               rank_current++;  //increase the rank            
+           }
            else {
-                status = address; // next time give address color 
-                rank_current =0; //put the rank back on zero
                 layer_oneHot = layer_oneHot << 1;
-                if(layer_current!=7)layer_current++;
-                else layer_current=0;       
-                if(layer_oneHot == 0) layer_oneHot = 1;
+                if(layer_oneHot == 0) layer_oneHot = 1; //get the new address
+                status = address; // next time give blue color 
+                rank_current =0; //put the rank back on zero for the next layer
+                if(layer_current!=7) layer_current++; else layer_current = 0; //if its not the last layer increase it
            }
            break;      
     }
-    return bytevalue;
+    return output;
 }
 //setData set the arrays to the new frame
-void LedCube::setData(char* data){
-    printf("Converting following data: \n\r");
-    for(int i = 0; i < 512; i++) printf("%d ", data[i]);
-    printf("\n\r\n\r");
-    
-    //convert raw data to rgb values 
-    for(int i = 0; i < 8; i++) {                //char array (afkomstig van raspberry pi) omzetten naar rgb matrix (voor ledcube)
+void LedCube::setData(unsigned char* data){
+    //convert raw data too rgb values 
+    for(int i = 0; i < 8; i++) { 
             int z = i * 64; // a layer is 64 byte 
             for(int j = 0; j < 8; j++) {
-                        int y = j * 8; //a row is 8 elements
-                        char weight = 128;
-                        for(int k = 0; k < 8; k++) {  //iterate for each element
-                            char digitbuffer = data[z+y+k]; //read byte consisting of color 1 led 
+                        int y = j * 8; //a collum is 8 rows
+                        unsigned char weight = 128;
+                        for(int k = 0; k < 8; k++) {  //iterate for each row
+                            unsigned char digitbuffer = data[z+y+k]; //read byte consisting of color 1 led 
                             //now select the right color
                             if(k == 0) {                             
                                                 rValues[i][j] = 0;
@@ -99,58 +82,36 @@
                         }
              }
      }
-     printf("Result: \n\r");
-     printAll();
-     printf("Conversion terminated\n\r");
 }
-
-void LedCube::testMode(TestConfig testconfig){
-    char leddata[512];
-    switch(testconfig){
-        case LedCube::firsthalfwhite : 
-            for(int i = 0; i < 256; i++) leddata[i] = 7;
-            for(int i = 256; i < 512; i++) leddata[i] = 0;
+void LedCube::printValues(Color_led color){
+    unsigned char(*toprint)[8][8];
+    switch (color)
+    {
+    case l_red:
+        toprint = &rValues;
         break;
-        case LedCube::secondhalfwhite : 
-            for(int i = 0; i < 256; i++) leddata[i] = 0;
-            for(int i = 256; i < 512; i++) leddata[i] = 7;
+    case l_green:
+        toprint = &gValues;
+        break;
+    case l_blue:
+        toprint = &bValues;
+        break;
+    default:
+        toprint = &rValues; //set the default to red should not happen anyway
         break;
     }
-    setData(leddata);
-}
-
-void LedCube::printrValues(){
-    for(int i = 0; i < 8; i ++){
-        for(int j = 0; j < 8; j++){
-            printf("%03d ", rValues[i][j]);
-        }   
-        printf("\n\r"); 
+    for (int i = 0; i < 8; i++){
+        for (int j = 0; j < 8; j++){
+            printf("%03d ", (*toprint)[i][j]);
+        }
+        printf("\n\r");
     }
 }
-
-void LedCube::printgValues(){
-    for(int i = 0; i < 8; i ++){
-        for(int j = 0; j < 8; j++){
-            printf("%03d ", gValues[i][j]);
-        }   
-        printf("\n\r"); 
-    }
-}
-
-void LedCube::printbValues(){
-    for(int i = 0; i < 8; i ++){
-        for(int j = 0; j < 8; j++){
-            printf("%03d ", bValues[i][j]);
-        }   
-        printf("\n\r"); 
-    }
-}
-
 void LedCube::printAll(){
     printf("Red Matrix: \n\r");
-    printrValues();
+    printValues(l_red);
     printf("\n\rGreen Matrix: \n\r");
-    printgValues();
+    printValues(l_green);
     printf("\n\rBlue Matrix: \n\r");
-    printbValues();
-}
+    printValues(l_blue);
+}
\ No newline at end of file