Solution to Interrupt Exercise
Fork of digitalInInterrupt_sample by
main.cpp@4:60cc36256d3e, 2018-02-01 (annotated)
- Committer:
- Sarang
- Date:
- Thu Feb 01 17:20:42 2018 +0000
- Revision:
- 4:60cc36256d3e
- Parent:
- 3:05b6a1431a6b
Final
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
WilliamMarshQMUL | 0:a66a8cb0012c | 1 | #include "mbed.h" |
WilliamMarshQMUL | 0:a66a8cb0012c | 2 | |
WilliamMarshQMUL | 1:13e0c1956b54 | 3 | // Labs 2: Example program for using an interrupt (or callback) |
WilliamMarshQMUL | 1:13e0c1956b54 | 4 | // ----------------------------------------------------------- |
WilliamMarshQMUL | 1:13e0c1956b54 | 5 | // A callback function (corresponding to an ISR) is called when a button |
WilliamMarshQMUL | 1:13e0c1956b54 | 6 | // is pressed |
WilliamMarshQMUL | 1:13e0c1956b54 | 7 | // The callback uses a shared variable to signal another thread |
WilliamMarshQMUL | 0:a66a8cb0012c | 8 | |
WilliamMarshQMUL | 1:13e0c1956b54 | 9 | InterruptIn button(PTD0); |
Sarang | 4:60cc36256d3e | 10 | InterruptIn button1(PTD2); |
Sarang | 4:60cc36256d3e | 11 | DigitalOut led(LED_RED); |
Sarang | 4:60cc36256d3e | 12 | DigitalOut led1(LED_BLUE); |
WilliamMarshQMUL | 0:a66a8cb0012c | 13 | |
WilliamMarshQMUL | 1:13e0c1956b54 | 14 | volatile int pressEvent = 0 ; |
Sarang | 4:60cc36256d3e | 15 | volatile int pressEvent1 = 0 ; |
Sarang | 4:60cc36256d3e | 16 | volatile int timez = 500 ; |
Sarang | 4:60cc36256d3e | 17 | |
Sarang | 4:60cc36256d3e | 18 | volatile int buttonpressed = 1; |
Sarang | 4:60cc36256d3e | 19 | volatile int buttonpressed1 = 1; |
Sarang | 4:60cc36256d3e | 20 | |
WilliamMarshQMUL | 0:a66a8cb0012c | 21 | |
WilliamMarshQMUL | 3:05b6a1431a6b | 22 | // This function is invoked when then interrupt occurs |
WilliamMarshQMUL | 3:05b6a1431a6b | 23 | // Signal that the button has been pressed |
WilliamMarshQMUL | 1:13e0c1956b54 | 24 | // Note: bounce may occur |
Sarang | 4:60cc36256d3e | 25 | void buttonCallback() |
Sarang | 4:60cc36256d3e | 26 | |
Sarang | 4:60cc36256d3e | 27 | { |
WilliamMarshQMUL | 1:13e0c1956b54 | 28 | pressEvent = 1 ; |
WilliamMarshQMUL | 0:a66a8cb0012c | 29 | } |
WilliamMarshQMUL | 0:a66a8cb0012c | 30 | |
Sarang | 4:60cc36256d3e | 31 | void buttonCallback1() |
Sarang | 4:60cc36256d3e | 32 | |
Sarang | 4:60cc36256d3e | 33 | { |
Sarang | 4:60cc36256d3e | 34 | pressEvent1 = 1 ; |
Sarang | 4:60cc36256d3e | 35 | } |
Sarang | 4:60cc36256d3e | 36 | |
WilliamMarshQMUL | 3:05b6a1431a6b | 37 | /* ---- Main function (default thread) ---- |
WilliamMarshQMUL | 3:05b6a1431a6b | 38 | Note that if this thread completes, nothing else works |
WilliamMarshQMUL | 3:05b6a1431a6b | 39 | */ |
WilliamMarshQMUL | 3:05b6a1431a6b | 40 | int main() { |
WilliamMarshQMUL | 3:05b6a1431a6b | 41 | button.mode(PullUp); // Ensure button i/p has pull up |
WilliamMarshQMUL | 3:05b6a1431a6b | 42 | button.fall(&buttonCallback) ; // Attach function to falling edge |
Sarang | 4:60cc36256d3e | 43 | |
Sarang | 4:60cc36256d3e | 44 | button1.mode(PullUp); |
Sarang | 4:60cc36256d3e | 45 | button1.fall(&buttonCallback1); |
WilliamMarshQMUL | 3:05b6a1431a6b | 46 | |
WilliamMarshQMUL | 0:a66a8cb0012c | 47 | while(true) { |
WilliamMarshQMUL | 3:05b6a1431a6b | 48 | // Toggle the LED every time the button is pressed |
Sarang | 4:60cc36256d3e | 49 | |
WilliamMarshQMUL | 0:a66a8cb0012c | 50 | if (pressEvent) { |
Sarang | 4:60cc36256d3e | 51 | |
Sarang | 4:60cc36256d3e | 52 | buttonpressed = !buttonpressed; |
Sarang | 4:60cc36256d3e | 53 | |
WilliamMarshQMUL | 1:13e0c1956b54 | 54 | pressEvent = 0 ; // Clear the event variable |
WilliamMarshQMUL | 0:a66a8cb0012c | 55 | } |
Sarang | 4:60cc36256d3e | 56 | |
Sarang | 4:60cc36256d3e | 57 | if (pressEvent1) { |
Sarang | 4:60cc36256d3e | 58 | |
Sarang | 4:60cc36256d3e | 59 | buttonpressed1 = !buttonpressed1; |
Sarang | 4:60cc36256d3e | 60 | |
Sarang | 4:60cc36256d3e | 61 | pressEvent1 = 0 ; // Clear the event variable |
Sarang | 4:60cc36256d3e | 62 | } |
Sarang | 4:60cc36256d3e | 63 | |
Sarang | 4:60cc36256d3e | 64 | if (buttonpressed){ |
Sarang | 4:60cc36256d3e | 65 | |
Sarang | 4:60cc36256d3e | 66 | led =!led; |
Sarang | 4:60cc36256d3e | 67 | } |
Sarang | 4:60cc36256d3e | 68 | |
Sarang | 4:60cc36256d3e | 69 | if (buttonpressed1){ |
Sarang | 4:60cc36256d3e | 70 | |
Sarang | 4:60cc36256d3e | 71 | led1 =!led1; |
Sarang | 4:60cc36256d3e | 72 | } |
Sarang | 4:60cc36256d3e | 73 | |
Sarang | 4:60cc36256d3e | 74 | |
Sarang | 4:60cc36256d3e | 75 | Thread::wait(timez) ; |
WilliamMarshQMUL | 0:a66a8cb0012c | 76 | } |
WilliamMarshQMUL | 0:a66a8cb0012c | 77 | } |