Lab 2 answer to part 2

Fork of digitalInInterrupt_sample by William Marsh

Committer:
AnastasiosBarlas
Date:
Thu Feb 01 17:57:01 2018 +0000
Revision:
4:86fd8725e198
Parent:
3:05b6a1431a6b
version1

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);
AnastasiosBarlas 4:86fd8725e198 10 InterruptIn button2(PTD5);
AnastasiosBarlas 4:86fd8725e198 11 DigitalOut led(LED_RED);
AnastasiosBarlas 4:86fd8725e198 12 DigitalOut led2(LED_BLUE);
WilliamMarshQMUL 0:a66a8cb0012c 13
WilliamMarshQMUL 1:13e0c1956b54 14 volatile int pressEvent = 0 ;
AnastasiosBarlas 4:86fd8725e198 15 volatile int pressEvent2 = 0 ;
AnastasiosBarlas 4:86fd8725e198 16 volatile int x;
AnastasiosBarlas 4:86fd8725e198 17 volatile int z;
WilliamMarshQMUL 3:05b6a1431a6b 18 // This function is invoked when then interrupt occurs
WilliamMarshQMUL 3:05b6a1431a6b 19 // Signal that the button has been pressed
WilliamMarshQMUL 1:13e0c1956b54 20 // Note: bounce may occur
WilliamMarshQMUL 1:13e0c1956b54 21 void buttonCallback(){
WilliamMarshQMUL 1:13e0c1956b54 22 pressEvent = 1 ;
WilliamMarshQMUL 0:a66a8cb0012c 23 }
AnastasiosBarlas 4:86fd8725e198 24 void button2Callback(){
AnastasiosBarlas 4:86fd8725e198 25 pressEvent2 = 1 ;
AnastasiosBarlas 4:86fd8725e198 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() {
WilliamMarshQMUL 3:05b6a1431a6b 31 button.mode(PullUp); // Ensure button i/p has pull up
WilliamMarshQMUL 3:05b6a1431a6b 32 button.fall(&buttonCallback) ; // Attach function to falling edge
WilliamMarshQMUL 3:05b6a1431a6b 33
AnastasiosBarlas 4:86fd8725e198 34 button2.mode(PullUp); // Ensure button i/p has pull up
AnastasiosBarlas 4:86fd8725e198 35 button2.fall(&button2Callback) ; // Attach function to falling edge
WilliamMarshQMUL 0:a66a8cb0012c 36 while(true) {
WilliamMarshQMUL 3:05b6a1431a6b 37 // Toggle the LED every time the button is pressed
WilliamMarshQMUL 0:a66a8cb0012c 38 if (pressEvent) {
AnastasiosBarlas 4:86fd8725e198 39
AnastasiosBarlas 4:86fd8725e198 40 x=!x;
AnastasiosBarlas 4:86fd8725e198 41 if (x==1){
AnastasiosBarlas 4:86fd8725e198 42 //led=!led;
AnastasiosBarlas 4:86fd8725e198 43 }
WilliamMarshQMUL 1:13e0c1956b54 44 pressEvent = 0 ; // Clear the event variable
WilliamMarshQMUL 0:a66a8cb0012c 45 }
AnastasiosBarlas 4:86fd8725e198 46 if (x==0){
AnastasiosBarlas 4:86fd8725e198 47 led = !led;}
AnastasiosBarlas 4:86fd8725e198 48 // led2 = !led2 ;
AnastasiosBarlas 4:86fd8725e198 49 if (pressEvent2) {
AnastasiosBarlas 4:86fd8725e198 50 z=!z;
AnastasiosBarlas 4:86fd8725e198 51 if (z==1){
AnastasiosBarlas 4:86fd8725e198 52 //led2=!led2;
AnastasiosBarlas 4:86fd8725e198 53 }
AnastasiosBarlas 4:86fd8725e198 54 pressEvent2 = 0 ; // Clear the event variable
AnastasiosBarlas 4:86fd8725e198 55 }
AnastasiosBarlas 4:86fd8725e198 56 if (z==0){
AnastasiosBarlas 4:86fd8725e198 57 led2 = !led2;}
AnastasiosBarlas 4:86fd8725e198 58 Thread::wait(500) ;
WilliamMarshQMUL 0:a66a8cb0012c 59 }
WilliamMarshQMUL 0:a66a8cb0012c 60 }