Sunny Singh
/
Knightriderleds
LED chaser, like Knightrider sequence. Speed of sequence is controlled using serial interrupts.
main.cpp
- Committer:
- RandomSingh
- Date:
- 2010-07-29
- Revision:
- 0:b44ffe9b1e5b
File content as of revision 0:b44ffe9b1e5b:
/****************************************************************************** ¬ Knightrider.c ¬ ¬ Uses the onboard LEDS on mBED to continuously perform LED chaser sequence ¬ ¬ LED Chaser sequence timimg can be changed by using the serial comms and ¬ ¬ activity on digital port. ¬ ¬ ¬ ¬ Written by RandomSingh. 05/2010 ¬ ¬ ¬ ******************************************************************************/ /* Libraries */ #include "mbed.h" /* Output Assignements */ DigitalOut myled(LED1); DigitalOut myled2(LED2); DigitalOut myled3(LED3); DigitalOut myled4(LED4); /* Input Assignments */ DigitalIn enable(p5); /* Interrupt Assignemnts */ InterruptIn event(USBRX); InterruptIn event2(p16); /* Serial Port Assignment */ Serial pc(USBTX, USBRX); // tx, rx /* Macro Definitions */ #define LONGER 0.9 #define LONG 0.4 #define SHORT 0.05 #define FWD 0 #define REV 1 #define SLOW 0 #define MEDIUM 1 #define FAST 2 #define ON 1 #define OFF 0 /* Prototype Function declartions */ void initialise_LEDS(); void trigger(); void LED_chaser_sequence(); /* External Variables */ int timer; short speed; int direction = FWD; int phase; int main() { event.rise(&trigger); // Set up interrupts event2.rise(&trigger); initialise_LEDS(); pc.printf("Speed is slow\r\n"); // Default speed is slow while(1) {// Start of while LED_chaser_sequence(); }// End of while }// End of main /****************************************************************************** ¬ trigger function - ISR ¬ ¬ If activity on the rx line of the serial port then this ISR executes ¬ ¬ This ISR changes the external variable 'speed' value, which is used for ¬ ¬ timing of the sequence. ¬ ¬ ¬ ¬ The objective of this ISR is to change the 'speed' value & transmit a ¬ ¬ a message to the serial port. ¬ ¬ ¬ ******************************************************************************/ void trigger() {// Start of trigger if(speed > FAST) // This bit of the code limits value of speed to 2 {// Start of if // as there are only three levels of timing speed = SLOW; pc.printf("Speed is slow\r\n"); }// End of if else {// Start of else speed++; }// End of else if(speed == MEDIUM) pc.printf("Speed is medium\r\n"); if(speed == FAST) pc.printf("Speed is fast\r\n"); }// End of trigger void LED_chaser_sequence() {// Start of LED_chaser_sequence switch(phase) {// Start of switch case 0: myled = OFF; myled2 = OFF; myled3 = OFF; myled4 = OFF; wait(LONG); wait(SHORT); direction = FWD; phase++; break; case 1: myled = ON; myled2 = OFF; myled3 = OFF; myled4 = OFF; wait(SHORT); if(direction == FWD) {// Start of if phase++; }// End of if else {// Start of else phase--; }// End of else break; case 2: myled = OFF; myled2 = ON; myled3 = OFF; myled4 = OFF; wait(SHORT); if(direction == FWD) {// Start of if phase++; }// End of if else {// Start of else phase--; }// End of else break; case 3: myled = OFF; myled2 = OFF; myled3 = ON; myled4 = OFF; wait(SHORT); if(direction == FWD) {// Start of if phase++; }// End of if else {// Start of else phase--; }// End of else break; case 4: myled = OFF; myled2 = OFF; myled3 = OFF; myled4 = ON; wait(SHORT); direction = REV; phase--; break; default : wait(SHORT); break; }// End of switch switch(speed) {// Start of switch case SLOW : wait(LONGER); break; case MEDIUM : wait(LONG); break; case FAST : wait(SHORT); break; default : wait(SHORT); break; }// End of switch }// End of LED_chaser_sequence void initialise_LEDS() {// Start of initialise_LEDS myled = OFF; myled2 = OFF; myled3 = OFF; myled4 = OFF; }// End of initialise_LEDS