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.
main.cpp
- Committer:
- sNICKer1103
- Date:
- 2014-04-23
- Revision:
- 0:333c9abcd919
- Child:
- 1:53b8c6b13010
File content as of revision 0:333c9abcd919:
#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;
}
}
}
}