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-05-01
- Revision:
- 2:f2700008c9d9
- Parent:
- 1:53b8c6b13010
- Child:
- 3:da30c350c339
File content as of revision 2:f2700008c9d9:
#include "mbed.h"
#include "I2CDriver.h"
#include "SPIDriver.h"
#include "LedCube.h"
bool printed = false;
bool testprinted = false;
char layer = 1;
bool first = true;
int success = 1;
char databuffer[512];
const int spifreq = 10000000; //frequency of SPI interface
const char address = 0xA0; //address van I2C interface
LedCube *ledcube = new LedCube();
int counter1 = 0;
int counter2 = 0;
int counter3 = 0;
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}}
};
char ledbuffer[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}}
};
//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] = {{3,129,129,129,129,129,129,153},
{3,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,3}
};
char gmatrix[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,3,129,129,153},
{153,129,129,129,129,129,129,153},
{153,129,129,129,129,129,129,153},
{2,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,3}
};
SPIDriver *spidriver = new SPIDriver(p5, NC, p7, p8, p10, spifreq);
I2CDriver *i2cdriver = new I2CDriver(p28, p27, address);
//DigitalOut blank(p9);
Serial pc(USBTX, USBRX);
uint8_t reverse_byte(uint8_t byte);
void initialtest();
void sendbuffer();
void modifybuffer();
void torgbmatrix(const char ledm[8][8][8], char rmat[8][8], char gmat[8][8], char bmat[8][8]);
int main()
{
for(int i = 0; i < 400; i++) {
initialtest();
}
while(true) {
if (i2cdriver->receive() == I2CDriver::WriteAddressed) {
pc.printf("Waarde ontvangen!\n\r");
modifybuffer();
printed = false;
}
sendbuffer();
}//while loop
}//end main
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 initialtest(){
for(int i = 0; i < 8; i++) { //eerst laag selecteren, SPI zendt normaalgezien MSB first
spidriver->write(ledcube->getNextValue());
for(int j = 0; j < 24; j++) {
spidriver->write(ledcube->getNextValue()); //ledwaarden zelf nog altijd apart, omdat ze mogelijk gespiegeld moeten doorgestuurd worden
} //(LSB first)
wait(0.00125); //voor 100 Hz
//blank = 1;
spidriver->pulseLatch();
//blank = 0;
}//end outer for loop
// latch = 1;
}
void sendbuffer()
{
for(int i = 0; i < 8; i++) { //eerst laag selecteren, SPI zendt normaalgezien MSB first
spidriver->write(ledcube->getNextValue());
for(int j = 0; j < 24; j++) {
spidriver->write(ledcube->getNextValue()); //ledwaarden zelf nog altijd apart, omdat ze mogelijk gespiegeld moeten doorgestuurd worden
} //(LSB first)
wait(0.00125);
//blank = 1;
spidriver->pulseLatch();
//blank = 0;
}//end outer for loop
// latch = 1;
}
void modifybuffer()
{
unsigned char ledcolor;
while(!((counter1 == 8) && (counter2 == 0) && (counter3 == 1))) {
ledcolor = i2cdriver->read();
if (ledcolor == 8) {
counter1 = 0;
counter2 = 0;
counter3 = 0;
} else {
if (ledcolor == 9) {
ledcube->setData(databuffer);
break;
} else {
ledbuffer[counter1][counter2][counter3] = ledcolor;
if (counter3 < 7) {
counter3++;
} else {
if (counter2 < 7) {
counter2++;
counter3 = 0;
} else {
if (counter1 < 7) {
counter1++;
counter2 = 0;
counter3 = 0;
}
}
}
}
}
}
}
void torgbmatrix(const 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;
}
}
}
}