LAB 2 answer to interrupt

Dependencies:   digitalInInterrupt_sample

Fork of digitalInInterrupt_sample by William Marsh

Committer:
Bossman
Date:
Fri Feb 02 11:35:20 2018 +0000
Revision:
4:e96ddcc3ded7
Parent:
3:05b6a1431a6b
Version 1

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 // -----------------------------------------------------------
Bossman 4:e96ddcc3ded7 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
Bossman 4:e96ddcc3ded7 9 InterruptIn buttonred(PTD0);
Bossman 4:e96ddcc3ded7 10 InterruptIn buttonblue(PTD5);
Bossman 4:e96ddcc3ded7 11 DigitalOut ledred(LED_RED);
Bossman 4:e96ddcc3ded7 12 DigitalOut ledblue(LED_BLUE);
WilliamMarshQMUL 0:a66a8cb0012c 13
Bossman 4:e96ddcc3ded7 14 volatile int pressEventred = 0 ;
Bossman 4:e96ddcc3ded7 15 volatile int pressEventblue = 0 ;
Bossman 4:e96ddcc3ded7 16 volatile int red;
Bossman 4:e96ddcc3ded7 17 volatile int blue;
WilliamMarshQMUL 3:05b6a1431a6b 18 // This function is invoked when then interrupt occurs
WilliamMarshQMUL 3:05b6a1431a6b 19 // Signal that the button has been pressed
Bossman 4:e96ddcc3ded7 20 // Note: bounce may occur
Bossman 4:e96ddcc3ded7 21 void buttonredCallback(){
Bossman 4:e96ddcc3ded7 22 pressEventred = 1 ;
WilliamMarshQMUL 0:a66a8cb0012c 23 }
Bossman 4:e96ddcc3ded7 24 void buttonblueCallback(){
Bossman 4:e96ddcc3ded7 25 pressEventblue = 1 ;
Bossman 4:e96ddcc3ded7 26 }
WilliamMarshQMUL 3:05b6a1431a6b 27 /* ---- Main function (default thread) ----
WilliamMarshQMUL 3:05b6a1431a6b 28 Note that if this thread completes, nothing else works
WilliamMarshQMUL 3:05b6a1431a6b 29 */
WilliamMarshQMUL 3:05b6a1431a6b 30 int main() {
Bossman 4:e96ddcc3ded7 31 buttonred.mode(PullUp); // Ensure button i/p has pull up
Bossman 4:e96ddcc3ded7 32 buttonred.fall(&buttonredCallback) ; // Attach function to falling edge
WilliamMarshQMUL 3:05b6a1431a6b 33
Bossman 4:e96ddcc3ded7 34 buttonblue.mode(PullUp); // Ensure button i/p has pull up
Bossman 4:e96ddcc3ded7 35 buttonblue.fall(&buttonblueCallback) ; // Attach function to falling edge
WilliamMarshQMUL 0:a66a8cb0012c 36 while(true) {
WilliamMarshQMUL 3:05b6a1431a6b 37 // Toggle the LED every time the button is pressed
Bossman 4:e96ddcc3ded7 38 if (pressEventred){
Bossman 4:e96ddcc3ded7 39 red=!red;
Bossman 4:e96ddcc3ded7 40 pressEventred = 0 ; // Clear the event variable
WilliamMarshQMUL 0:a66a8cb0012c 41 }
Bossman 4:e96ddcc3ded7 42 if (red==0){
Bossman 4:e96ddcc3ded7 43 ledred = !ledred;
Bossman 4:e96ddcc3ded7 44 }
Bossman 4:e96ddcc3ded7 45 if (pressEventblue){
Bossman 4:e96ddcc3ded7 46 blue=!blue;
Bossman 4:e96ddcc3ded7 47 pressEventblue = 0 ; // Clear the event variable
Bossman 4:e96ddcc3ded7 48 }
Bossman 4:e96ddcc3ded7 49 if (blue==0){
Bossman 4:e96ddcc3ded7 50 ledblue = !ledblue;
Bossman 4:e96ddcc3ded7 51 }
Bossman 4:e96ddcc3ded7 52 Thread::wait(500) ;
WilliamMarshQMUL 0:a66a8cb0012c 53 }
Bossman 4:e96ddcc3ded7 54
Bossman 4:e96ddcc3ded7 55 }
Bossman 4:e96ddcc3ded7 56