![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
HW5.2
Dependencies: blink_kl46z_button_nowait mbed
Fork of blink_kl46z_button_nowait by
main.cpp@6:cacef74ca13e, 2015-09-28 (annotated)
- Committer:
- destradafilm
- Date:
- Mon Sep 28 16:54:43 2015 +0000
- Revision:
- 6:cacef74ca13e
- Parent:
- 5:dc506f422393
HW 5.2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
scohennm | 0:e23fffd4b9a7 | 1 | #include "mbed.h" |
scohennm | 2:b49e5adf84df | 2 | |
scohennm | 0:e23fffd4b9a7 | 3 | #define LEDON false |
scohennm | 0:e23fffd4b9a7 | 4 | #define LEDOFF true |
scohennm | 1:2688f68df85d | 5 | #define NUMBUTS 2 |
scohennm | 3:7e9670be412e | 6 | #define LBUT PTC12 // port addresses for buttons |
scohennm | 1:2688f68df85d | 7 | #define RBUT PTC3 |
scohennm | 3:7e9670be412e | 8 | #define BLINKTIME 0.3 // in seconds |
scohennm | 3:7e9670be412e | 9 | #define BUTTONTIME 0.2 |
scohennm | 3:7e9670be412e | 10 | |
destradafilm | 6:cacef74ca13e | 11 | #define PROGNAME "DEstrada-HW-5.2-Interrupt and Timout\r\n" |
scohennm | 0:e23fffd4b9a7 | 12 | |
scohennm | 3:7e9670be412e | 13 | // Timer to elliminate wait() function |
scohennm | 3:7e9670be412e | 14 | Timer LEDTimer; // for blinking LEDs |
scohennm | 3:7e9670be412e | 15 | Timer ButtonTimer; // for reading button states |
destradafilm | 6:cacef74ca13e | 16 | Timeout blinker; |
scohennm | 3:7e9670be412e | 17 | |
destradafilm | 6:cacef74ca13e | 18 | bool ledState = LEDON; // false |
destradafilm | 6:cacef74ca13e | 19 | |
destradafilm | 6:cacef74ca13e | 20 | DigitalIn buttons[NUMBUTS] = {RBUT, LBUT}; // buttons[2] |
destradafilm | 6:cacef74ca13e | 21 | DigitalOut LEDs[NUMBUTS] = {LED_GREEN, LED_RED}; // LEDs[2] |
scohennm | 1:2688f68df85d | 22 | Serial pc(USBTX, USBRX);// set up USB as communicationis to Host PC via USB connectons |
scohennm | 0:e23fffd4b9a7 | 23 | |
destradafilm | 6:cacef74ca13e | 24 | //interrupts |
destradafilm | 6:cacef74ca13e | 25 | InterruptIn rtButton(RBUT); |
destradafilm | 6:cacef74ca13e | 26 | InterruptIn lButton(LBUT); |
destradafilm | 6:cacef74ca13e | 27 | |
destradafilm | 6:cacef74ca13e | 28 | //keept this |
scohennm | 3:7e9670be412e | 29 | void allLEDsOff(){ |
scohennm | 3:7e9670be412e | 30 | int i; |
scohennm | 3:7e9670be412e | 31 | for (i=0; i<NUMBUTS; i++){ |
scohennm | 3:7e9670be412e | 32 | LEDs[i] = LEDOFF; |
scohennm | 3:7e9670be412e | 33 | } |
scohennm | 3:7e9670be412e | 34 | } |
destradafilm | 6:cacef74ca13e | 35 | |
scohennm | 2:b49e5adf84df | 36 | |
scohennm | 3:7e9670be412e | 37 | void initialize_global_vars(){ |
scohennm | 3:7e9670be412e | 38 | pc.printf(PROGNAME); |
scohennm | 3:7e9670be412e | 39 | // set up DAQ timers |
scohennm | 3:7e9670be412e | 40 | ButtonTimer.start(); |
scohennm | 3:7e9670be412e | 41 | ButtonTimer.reset(); |
scohennm | 3:7e9670be412e | 42 | LEDTimer.start(); |
scohennm | 3:7e9670be412e | 43 | LEDTimer.reset(); |
destradafilm | 6:cacef74ca13e | 44 | allLEDsOff(); // makes sure LEDS are off |
scohennm | 3:7e9670be412e | 45 | } |
destradafilm | 6:cacef74ca13e | 46 | |
destradafilm | 6:cacef74ca13e | 47 | //global variable |
destradafilm | 6:cacef74ca13e | 48 | int currentLED = 0; |
destradafilm | 6:cacef74ca13e | 49 | |
destradafilm | 6:cacef74ca13e | 50 | |
destradafilm | 6:cacef74ca13e | 51 | // interrupt |
destradafilm | 6:cacef74ca13e | 52 | void rtButtonPressed(){ |
destradafilm | 6:cacef74ca13e | 53 | allLEDsOff(); |
destradafilm | 6:cacef74ca13e | 54 | currentLED = 0; |
destradafilm | 6:cacef74ca13e | 55 | } |
destradafilm | 6:cacef74ca13e | 56 | |
destradafilm | 6:cacef74ca13e | 57 | // interrupt |
destradafilm | 6:cacef74ca13e | 58 | void lButtonPressed(){ |
destradafilm | 6:cacef74ca13e | 59 | allLEDsOff(); |
destradafilm | 6:cacef74ca13e | 60 | currentLED = 1; |
destradafilm | 6:cacef74ca13e | 61 | } |
destradafilm | 6:cacef74ca13e | 62 | |
destradafilm | 6:cacef74ca13e | 63 | //Timeout call |
destradafilm | 6:cacef74ca13e | 64 | void blink() { |
destradafilm | 6:cacef74ca13e | 65 | ledState = !ledState; // Flip the general state |
destradafilm | 6:cacef74ca13e | 66 | LEDs[currentLED] = ledState; |
destradafilm | 6:cacef74ca13e | 67 | } |
destradafilm | 6:cacef74ca13e | 68 | |
destradafilm | 6:cacef74ca13e | 69 | |
destradafilm | 6:cacef74ca13e | 70 | |
scohennm | 1:2688f68df85d | 71 | // -------------------------------- |
scohennm | 3:7e9670be412e | 72 | int main() { |
scohennm | 3:7e9670be412e | 73 | initialize_global_vars(); //keep things organized |
scohennm | 3:7e9670be412e | 74 | LEDs[currentLED] = LEDON; |
destradafilm | 6:cacef74ca13e | 75 | // End of setup |
destradafilm | 6:cacef74ca13e | 76 | |
destradafilm | 6:cacef74ca13e | 77 | //Interrupts |
destradafilm | 6:cacef74ca13e | 78 | rtButton.fall(&rtButtonPressed); |
destradafilm | 6:cacef74ca13e | 79 | lButton.fall(&lButtonPressed); |
destradafilm | 6:cacef74ca13e | 80 | |
scohennm | 3:7e9670be412e | 81 | |
scohennm | 0:e23fffd4b9a7 | 82 | while(true) { |
destradafilm | 6:cacef74ca13e | 83 | |
destradafilm | 6:cacef74ca13e | 84 | if(LEDTimer.read() > BLINKTIME){ |
destradafilm | 6:cacef74ca13e | 85 | LEDTimer.reset(); |
destradafilm | 6:cacef74ca13e | 86 | blinker.attach(&blink, 0.2); |
scohennm | 1:2688f68df85d | 87 | } |
scohennm | 0:e23fffd4b9a7 | 88 | } |
scohennm | 0:e23fffd4b9a7 | 89 | } |