Solution to Interrupt Exercise

Fork of digitalInInterrupt_sample by William Marsh

Committer:
Sarang
Date:
Thu Feb 01 17:20:42 2018 +0000
Revision:
4:60cc36256d3e
Parent:
3:05b6a1431a6b
Final

Who changed what in which revision?

UserRevisionLine numberNew 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 }