Nick Lowyck / Mbed 2 deprecated Ledcube

Dependencies:   mbed mbed-rtos

Revision:
0:333c9abcd919
Child:
1:53b8c6b13010
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Apr 23 09:51:33 2014 +0000
@@ -0,0 +1,210 @@
+#include "mbed.h"
+
+bool printed = false;
+bool sent = false;
+char layer = 1;
+bool first = true;
+int success = 1;
+
+char ledexample[8][8][8] = {{{6,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,7}},
+                            {{7,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,7}},
+                            {{7,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,7}},
+                            {{4,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,3}},
+                            {{4,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,3}},
+                            {{7,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,7}},
+                            {{7,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,7}},
+                            {{7,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,5}}};
+
+const char rsolution[8][8] = {{153,129,129,129,129,129,129,153},
+                              {153,129,129,129,129,129,129,153},
+                              {153,129,129,129,129,129,129,153},
+                              {153,129,129,129,129,129,129,152},
+                              {153,129,129,129,129,129,129,152},
+                              {153,129,129,129,129,129,129,153},
+                              {153,129,129,129,129,129,129,153},
+                              {153,129,129,129,129,129,129,153}};
+
+const char gsolution[8][8] = {{153,129,129,129,129,129,129,153},
+                              {153,129,129,129,129,129,129,153},
+                              {153,129,129,129,129,129,129,153},
+                              {25,129,129,129,129,129,129,153},
+                              {25,129,129,129,129,129,129,153},
+                              {153,129,129,129,129,129,129,153},
+                              {153,129,129,129,129,129,129,153},
+                              {153,129,129,129,129,129,129,152}};
+
+const char bsolution[8][8] = {{25,129,129,129,129,129,129,153},
+                              {153,129,129,129,129,129,129,153},
+                              {153,129,129,129,129,129,129,153},
+                              {25,129,129,129,129,129,129,153},
+                              {25,129,129,129,129,129,129,153},
+                              {153,129,129,129,129,129,129,153},
+                              {153,129,129,129,129,129,129,153},
+                              {153,129,129,129,129,129,129,153}};
+
+//matrix (8*8*8): top to bottom, eerst r dan g dan b dan laag (per laag, dus 33 chars)(één char:rij voor één kleur)
+const char matrix[8][3][8] = {{{18,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,16}},
+                              {{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129}},
+                              {{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129}},
+                              {{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129}},
+                              {{11,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,3}},
+                              {{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129}},
+                              {{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129}},
+                              {{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{19,0,0,0,0,0,0,17}}};
+
+char rmatrix[8][8] = {{153,129,129,129,129,129,129,153},
+                      {153,129,129,129,129,129,129,153},
+                      {153,129,129,129,129,129,129,153},
+                      {153,129,129,129,129,129,129,152},
+                      {153,129,129,129,129,129,129,152},
+                      {153,129,129,129,129,129,129,153},
+                      {153,129,129,129,129,129,129,153},
+                      {153,129,129,129,129,129,129,153}};
+
+char gmatrix[8][8] = {{153,129,129,129,129,129,129,153},
+                      {153,129,129,129,129,129,129,153},
+                      {153,129,129,129,129,129,129,153},
+                      {153,129,129,129,129,129,129,152},
+                      {153,129,129,129,129,129,129,152},
+                      {153,129,129,129,129,129,129,153},
+                      {153,129,129,129,129,129,129,153},
+                      {153,129,129,129,129,129,129,153}};
+
+char bmatrix[8][8] = {{153,129,129,129,129,129,129,153},
+                      {153,129,129,129,129,129,129,153},
+                      {153,129,129,129,129,129,129,153},
+                      {153,129,129,129,129,129,129,152},
+                      {153,129,129,129,129,129,129,152},
+                      {153,129,129,129,129,129,129,153},
+                      {153,129,129,129,129,129,129,153},
+                      {153,129,129,129,129,129,129,153}};
+
+SPI spi(p5, NC, p7); // mosi, miso, sclk
+DigitalOut latch(p8);
+//DigitalOut blank(p9);
+DigitalOut cs(p10);
+Serial pc(USBTX, USBRX);
+
+uint8_t reverse_byte(uint8_t byte);
+void torgbmatrix(char ledm[8][8][8], char rmat[8][8], char gmat[8][8], char bmat[8][8]);
+
+int main()
+{
+    /*
+    torgbmatrix(ledexample, rmatrix, gmatrix, bmatrix);
+
+    for(int i = 0; i < 8; i++){
+        for(int j = 0; j < 8; j++){
+            if((rmatrix[i][j] != rsolution[i][j]) || (gmatrix[i][j] != gsolution[i][j]) || (bmatrix[i][j] != bsolution[i][j])){
+                success = 0;
+            }
+        }
+    }
+    while(true){}*/
+
+    spi.format(8,3);
+    spi.frequency(10000000);
+    //  blank = 0;
+    latch = 0;
+    cs = 1;
+
+    /* for(int i = 7; i >= 0; i--){
+         for(int j = 2; j >= 0; j--){
+             pc.printf("%d", matrix[i][j][k]
+         }
+     }*/
+
+    while(true) {
+        if(!sent) {                 //eerst laag selecteren, SPI zendt normaal gezien MSB first
+            for(int i = 7; i >= 0; i--) {
+                cs = 0;
+                spi.write(layer);
+                cs = 1;
+                if(!printed) pc.printf("%d  ", layer);
+                for(int j = 2; j >= 0; j--) {
+                    for(int k = 7; k >= 0; k--) {
+                        if (j == 2) {
+                            if(!printed) pc.printf("%d ", bmatrix[i][k]);
+                            cs = 0;
+                            spi.write(reverse_byte(bmatrix[i][k]));
+                            cs = 1;
+                        }
+
+                        if (j == 1) {
+                            if(!printed) pc.printf("%d ", gmatrix[i][k]);
+                            cs = 0;
+                            spi.write(reverse_byte(gmatrix[i][k]));
+                            cs = 1;
+                        }
+
+                        if (j == 0) {
+                            if(!printed) pc.printf("%d ", rmatrix[i][k]);
+                            cs = 0;
+                            spi.write(reverse_byte(rmatrix[i][k]));
+                            cs = 1;
+                        }
+                    }
+                    if(!printed) pc.printf("  ");
+                    if(!printed) pc.printf("\n\r");
+
+                    wait(0.00125);    //vragen aan tommy, buffer per laag?
+
+                    //blank = 1;
+                    latch = 1;
+                    latch = 0;
+                    //blank = 0;
+
+                    layer = layer << 1;
+                    if(layer == 0) layer = 1;
+                }
+                if(!printed) pc.printf("\n\r");
+                printed = true;
+                sent = true;
+                latch = 1;
+            }//end outer for loop
+        }
+    }//end if send
+
+}//end main
+
+unsigned char reverse_bits(unsigned char b)
+{
+    return ((b * 0x0802LU & 0x22110LU) | (b * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
+}
+
+uint8_t reverse_byte(uint8_t byte)
+{
+    return (__rbit(byte) >> 24) & 0xFF; // reverse a byte in a 32-bit value, and extract the byte
+}
+
+void torgbmatrix(char ledm[8][8][8], char rmat[8][8], char gmat[8][8], char bmat[8][8])
+{
+    for(int i = 0; i < 8; i++) {                //ledmatrix (afkomstig van raspberry pi) omzetten naar rgb matrix (voor ledcube)
+        for(int j = 0; j < 8; j++) {
+            char weight = 128;
+            for(int k = 0; k < 8; k++) {        //bij de rmatrix, gmatrix en bmatrix op de juiste plaatsen de juiste gewichten optellen indien nodig
+                char digitbuffer = ledm[i][j][k];       //bv voor rmatrix alleen gewicht bij optellen indien er een 1 op de derde positie is (binair)
+                if(k == 0) {                                                            //anders gezegd: als het getal in de ledmatrix groter of gelijk aan 4 is.
+                    rmat[i][j] = 0; //initialisatie
+                    gmat[i][j] = 0;
+                    bmat[i][j] = 0;
+                }
+                if(digitbuffer >= 4) {
+                    rmat[i][j] += weight;
+                    digitbuffer = digitbuffer - 4;
+                }
+
+                if(digitbuffer >= 2) {
+                    gmat[i][j] += weight;
+                    digitbuffer = digitbuffer - 2;
+                }
+
+                if(digitbuffer >= 1) {
+                    bmat[i][j] += weight;
+                }
+
+                weight = weight >> 1;
+            }
+        }
+    }
+}
\ No newline at end of file