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.
Diff: main.cpp
- Revision:
- 2:f2700008c9d9
- Parent:
- 1:53b8c6b13010
- Child:
- 3:da30c350c339
--- a/main.cpp Wed Apr 30 11:49:26 2014 +0000
+++ b/main.cpp Thu May 01 20:58:59 2014 +0000
@@ -1,10 +1,17 @@
#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;
@@ -41,36 +48,6 @@
{{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 testrmatrix[8][8] = {{255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255}
-};
-
-char testgmatrix[8][8] = {{255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255}
-};
-
-char testbmatrix[8][8] = {{255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255},
- {255,255,255,255,255,255,255,255}
-};
-
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},
@@ -101,11 +78,9 @@
{153,129,129,129,129,129,129,3}
};
-SPI spi(p5, NC, p7); // mosi, miso, sclk
-I2CSlave slave(p28, p27); //sda, scl
-DigitalOut latch(p8);
+SPIDriver *spidriver = new SPIDriver(p5, NC, p7, p8, p10, spifreq);
+I2CDriver *i2cdriver = new I2CDriver(p28, p27, address);
//DigitalOut blank(p9);
-DigitalOut cs(p10);
Serial pc(USBTX, USBRX);
uint8_t reverse_byte(uint8_t byte);
@@ -116,19 +91,12 @@
int main()
{
- spi.format(8,3);
- spi.frequency(10000000);
- slave.address(0xA0); //bevestigen!
- // blank = 0;
- latch = 0;
- cs = 1;
-
for(int i = 0; i < 400; i++) {
initialtest();
}
while(true) {
- if (slave.receive() == I2CSlave::WriteAddressed) {
+ if (i2cdriver->receive() == I2CDriver::WriteAddressed) {
pc.printf("Waarde ontvangen!\n\r");
modifybuffer();
printed = false;
@@ -137,131 +105,54 @@
}//while loop
}//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 initialtest()
-{
- for(int i = 7; i >= 0; i--) { //eerst laag selecteren, SPI zendt normaalgezien MSB first
- cs = 0;
- spi.write(layer);
- cs = 1;
- if(!testprinted) pc.printf("%d ", layer);
- for(int j = 2; j >= 0; j--) {
- for(int k = 7; k >= 0; k--) {
- if (j == 2) {
- if(!testprinted) pc.printf("%d ", testbmatrix[i][k]);
- cs = 0;
- spi.write(reverse_byte(testbmatrix[i][k]));
- cs = 1;
- }
-
- if (j == 1) {
- if(!testprinted) pc.printf("%d ", testgmatrix[i][k]);
- cs = 0;
- spi.write(reverse_byte(gmatrix[i][k]));
- cs = 1;
- }
-
- if (j == 0) {
- if(!testprinted) pc.printf("%d ", testrmatrix[i][k]);
- cs = 0;
- spi.write(reverse_byte(testrmatrix[i][k]));
- cs = 1;
- }
- }
- if(!testprinted) pc.printf(" ");
- if(!testprinted) pc.printf("\n\r");
-
- }
- if(!testprinted) pc.printf("\n\r");
- wait(0.00125); //vragen aan tommy, buffer per laag?
-
+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;
- latch = 1;
- latch = 0;
+ spidriver->pulseLatch();
//blank = 0;
-
- layer = layer << 1;
- if(layer == 0) layer = 1;
-
}//end outer for loop
// latch = 1;
- if(!testprinted) pc.printf("\n\r");
- testprinted = true;
-
}
void sendbuffer()
{
- 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");
-
- }
- if(!printed) pc.printf("\n\r");
- wait(0.00125); //vragen aan tommy, buffer per laag?
+ 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;
- latch = 1;
- latch = 0;
+ spidriver->pulseLatch();
//blank = 0;
- layer = layer << 1;
- if(layer == 0) layer = 1;
-
}//end outer for loop
// latch = 1;
- if(!printed) pc.printf("\n\r");
- printed = true;
}
void modifybuffer()
{
- char ledcolor;
+ unsigned char ledcolor;
while(!((counter1 == 8) && (counter2 == 0) && (counter3 == 1))) {
- ledcolor = slave.read();
+ ledcolor = i2cdriver->read();
if (ledcolor == 8) {
counter1 = 0;
counter2 = 0;
counter3 = 0;
} else {
if (ledcolor == 9) {
- torgbmatrix(ledbuffer, rmatrix, gmatrix, bmatrix);
+ ledcube->setData(databuffer);
break;
} else {
ledbuffer[counter1][counter2][counter3] = ledcolor;