Mbed Program for Gatech 4180 Shiftbrite LED Rotation Display
main.cpp
- Committer:
- kbahar3
- Date:
- 2011-12-14
- Revision:
- 0:0499f4bb7fa5
File content as of revision 0:0499f4bb7fa5:
/* ----- 4180 Final Design Project -----
Bicycle Wheel LED Image Display
*/
#include "mbed.h"
InterruptIn hall(p28); // This interupt is used to poll the Hall Effect IC
DigitalOut latch(p8);
DigitalOut enable(p9);
Timer timer; // This timer is used to time the wheel's rotation
int LEDRowNumber = 10; // This is equal to the number of divisions the user has setup for his or her image
int cycle_time = 0; // Global Variable for the full rotation
int rowIndex = 0; // Index for shifting through the Image array
bool top_wheel = false; // Variable Debug LED Circuit
int color = 0; // Variable for shifting through colors
int j; // For Loop index for LED debug circuit
float adj_cycle_time = 0; // Variable used to hold "cycle_time / LEDRowNumber"
//Cycles through different colors on RGB LED
SPI spi(p5, p6, p7);
//Use SPI hardware to write color values to LED driver chip
void RGB_LED(int red, int green, int blue) {
unsigned int low_color=0;
unsigned int high_color=0;
high_color=(blue<<4)|((red&0x3C0)>>6);
low_color=(((red&0x3F)<<10)|(green));
spi.write(high_color);
spi.write(low_color);
latch=1;
latch=0;
}
//Interupt Routine used to detect when the magnet passes the Hall Effect Sensor
void intRoutine() {
cycle_time = timer.read_ms(); //This is only called then the Hall Effect IC returns a "0"
adj_cycle_time = cycle_time / LEDRowNumber; //Calculates the time between sending each LED Row within the color Arrays
timer.reset(); //Resets the Timer
rowIndex = 0; //Resets the Row to be sent so the image always stays in the relatively same place
color=0; //Resets the color Index for the LED sample wheel so the image always stays in the same place
}
int main() {
hall.mode(PullUp); //Initializes the PullUp Resistor for the Hall Effect Sensor
hall.fall(&intRoutine); //Initializes the Interrupt Routine for the Hall Effect Sensor (on falling edge)
spi.format(16,0); //Initializes the Shiftbright LED Chain
spi.frequency(500000);
enable=0;
latch=0;
wait(2);
timer.start(); //Starts the Timer
/*//----- Color Initialization for Debug Program -----
int red=0;
int green=0;
int blue=0;
*/
/* //----- Spiral Pattern -----
int red[10][10]={50,0,0,0,0,0,0,0,0,0
,0,50,0,0,0,0,0,0,0,0
,0,0,50,0,0,0,0,0,0,0
,0,0,0,50,0,0,0,0,0,0
,0,0,0,0,50,0,0,0,0,0
,0,0,0,0,0,50,0,0,0,0
,0,0,0,0,0,0,50,0,0,0
,0,0,0,0,0,0,0,50,0,0
,0,0,0,0,0,0,0,0,50,0
,0,0,0,0,0,0,0,0,0,50};
int green[10][10]={50,0,0,0,0,0,0,0,0,0
,0,50,0,0,0,0,0,0,0,0
,0,0,50,0,0,0,0,0,0,0
,0,0,0,50,0,0,0,0,0,0
,0,0,0,0,50,0,0,0,0,0
,0,0,0,0,0,50,0,0,0,0
,0,0,0,0,0,0,50,0,0,0
,0,0,0,0,0,0,0,50,0,0
,0,0,0,0,0,0,0,0,50,0
,0,0,0,0,0,0,0,0,0,50};
int blue[10][10]={50,0,0,0,0,0,0,0,0,0
,0,50,0,0,0,0,0,0,0,0
,0,0,50,0,0,0,0,0,0,0
,0,0,0,50,0,0,0,0,0,0
,0,0,0,0,50,0,0,0,0,0
,0,0,0,0,0,50,0,0,0,0
,0,0,0,0,0,0,50,0,0,0
,0,0,0,0,0,0,0,50,0,0
,0,0,0,0,0,0,0,0,50,0
,0,0,0,0,0,0,0,0,0,50};
*/
//----- Pac Man -----
int red[10][10]={50,50,50,50,50,50,50,50,50,50
,50,50,50,50,50,50,50,50,50,50
,50,50,50,50,50,50,50,50,50,50
,50,50,50,50,50,50,50,50,50,50
,50,50,50,50,50,50,0,0,50,50
,50,50,50,50,50,50,50,50,50,50
,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0
,50,50,50,50,50,50,50,50,50,50
,50,50,50,50,50,50,50,50,50,50};
int green[10][10]={50,50,50,50,50,50,50,50,50,50
,50,50,50,50,50,50,50,50,50,50
,50,50,50,50,50,50,50,50,50,50
,50,50,50,50,50,50,50,50,50,50
,50,50,50,50,50,50,0,0,50,50
,50,50,50,50,50,50,50,50,50,50
,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0
,50,50,50,50,50,50,50,50,50,50
,50,50,50,50,50,50,50,50,50,50};
int blue[10][10]={0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0};
/*// -----Blue Triangle: From Bitmap Image Program -----
int red[36][10]={0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,42,42,42,42,42,
0,0,0,0,0,42,42,42,42,42,
0,0,0,0,0,0,0,42,42,42,
0,0,0,0,0,0,0,0,0,42,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,42,
0,0,0,0,0,0,0,0,0,42,
0,0,0,0,0,0,0,0,42,42,
0,0,0,0,0,0,0,0,42,42,
0,0,0,0,0,0,0,0,42,42,
0,0,0,0,0,0,0,0,0,42,
0,0,0,0,0,0,0,0,0,42,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,42,
0,0,0,0,0,0,0,42,42,42,
0,0,0,0,0,42,42,42,42,42,
0,0,0,0,0,42,42,42,42,42,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0};
int green[36][10]={0,0,0,0,42,42,42,42,42,42,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,42,42,42,42,42,42,
0,0,0,0,42,42,42,42,42,42,
0,0,0,0,42,42,42,42,42,42,
0,0,0,0,42,42,42,42,42,42,
0,0,0,0,42,42,42,42,42,42,
0,0,0,0,42,42,42,42,42,42,
0,0,0,0,42,42,42,42,42,42,
0,0,0,0,0,42,42,42,42,42,
0,0,0,0,0,0,0,42,42,42,
0,0,0,0,0,0,0,0,42,42,
0,0,0,0,0,0,0,42,42,42,
0,0,0,0,0,42,42,42,42,42,
0,0,0,0,0,42,42,42,42,42,
0,0,0,0,42,42,42,42,42,42,
0,0,0,0,42,42,42,42,42,42,
0,0,0,0,42,42,42,42,42,42,
0,0,0,0,42,42,42,42,42,42,
0,0,0,0,42,42,42,42,42,42};
int blue[36][10]={42,42,42,42,0,0,0,0,0,0,
42,42,42,42,42,0,0,0,0,0,
42,42,42,42,42,0,0,0,0,0,
42,42,42,42,42,42,42,0,0,0,
42,42,42,42,42,42,42,42,42,0,
42,42,42,42,42,42,42,42,42,42,
42,42,42,42,42,42,42,42,42,0,
42,42,42,42,42,42,42,42,42,0,
42,42,42,42,42,42,42,42,0,0,
42,42,42,42,42,42,42,42,0,0,
42,42,42,42,42,42,42,42,0,0,
42,42,42,42,42,42,42,42,42,0,
42,42,42,42,42,42,42,42,42,0,
42,42,42,42,42,42,42,42,42,42,
42,42,42,42,42,42,42,42,42,0,
42,42,42,42,42,42,42,0,0,0,
42,42,42,42,42,0,0,0,0,0,
42,42,42,42,42,0,0,0,0,0,
42,42,42,42,0,0,0,0,0,0,
42,42,42,42,0,0,0,0,0,0,
42,42,42,42,0,0,0,0,0,0,
42,42,42,42,0,0,0,0,0,0,
42,42,42,42,0,0,0,0,0,0,
42,42,42,42,0,0,0,0,0,0,
42,42,42,42,0,0,0,0,0,0,
42,42,42,42,42,0,0,0,0,0,
42,42,42,42,42,42,42,0,0,0,
42,42,42,42,42,42,42,42,0,0,
42,42,42,42,42,42,42,0,0,0,
42,42,42,42,42,0,0,0,0,0,
42,42,42,42,42,0,0,0,0,0,
42,42,42,42,0,0,0,0,0,0,
42,42,42,42,0,0,0,0,0,0,
42,42,42,42,0,0,0,0,0,0,
42,42,42,42,0,0,0,0,0,0,
42,42,42,42,0,0,0,0,0,0};
*/
while(1) {
//led1 = hall; // Used for Debugging the Hall Effect IC
//led2 = !hall; // Used for Debugging the Hall Effect IC
//----- Code for Cycling through a 2D Picture Array -----
wait_ms(adj_cycle_time);
for(int i=9;i>=0;i--){ //If we update without any waiting, the LEDs change colors super fast, and you won't notice the shifting LEDs
RGB_LED( red[rowIndex][i], green[rowIndex][i], blue[rowIndex][i]);
}
rowIndex++;
if(rowIndex>=LEDRowNumber){
rowIndex = 0;
}
/* //----- Debug Code: Rainbow Pattern ------ (Pre 2D Color Array)
wait_ms(adj_cycle_time);
top_wheel = true;
if (top_wheel && (color == 0)) {
// Red, Color 0
//printf("RED RED RED\r\n");
red = 50;
blue = 0;
green = 0;
for(j = 0; j < 10; j++)
RGB_LED(red, green, blue);
top_wheel = false;
color++;
}
if (top_wheel && (color == 1)) {
//printf("ORANGE ORANGE ORANGE\r\n");
// Orange, Color 1
red = 50;
blue = 0;
green = 25;
for(j = 0; j < 10; j++)
RGB_LED(red, green, blue);
top_wheel = false;
color++;
}
if (top_wheel && (color == 2)) {
//printf("YELLOW YELLOW YELLOW\r\n");
// Yellow, Color 2
red = 50;
blue = 0;
green = 50;
for(j = 0; j < 10; j++)
RGB_LED(red, green, blue);
top_wheel = false;
color++;
}
if (top_wheel && (color == 3)) {
//printf("GREEN GREEN GREEN\r\n");
// Green, Color 3
red = 0;
blue = 0;
green = 50;
for(j = 0; j < 10; j++)
RGB_LED(red, green, blue);
top_wheel = false;
color++;
}
if (top_wheel && (color == 4)) {
//printf("CYAN CYAN CYAN\r\n");
// Cyan, Color 4
red = 0;
blue = 50;
green = 50;
for(j = 0; j < 10; j++)
RGB_LED(red, green, blue);
top_wheel = false;
color++;
}
if (top_wheel && (color == 5)) {
//printf("BLUE BLUE BLUE\r\n");
// Blue, Color 5
red = 0;
blue = 50;
green = 0;
for(j = 0; j < 10; j++)
RGB_LED(red, green, blue);
top_wheel = false;
color++;
}
if (top_wheel && (color == 6)) {
//printf("PURPLE PURPLE PURPLE\r\n");
//Purple, Color 6
red = 50;
blue = 50;
green = 0;
for(j = 0; j < 10; j++)
RGB_LED(red, green, blue);
top_wheel = false;
color = 0;
}
*/
}
}