Kristopher Bahar
/
Shiftbright_Hall
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; } */ } }