assessed Interupt

Fork of digitalInInterrupt_sample by William Marsh

Committer:
dhenis
Date:
Fri Feb 02 21:44:55 2018 +0000
Revision:
4:4caae521ff66
Parent:
3:05b6a1431a6b
Interupt Assessed

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 // -----------------------------------------------------------
dhenis 4:4caae521ff66 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);
dhenis 4:4caae521ff66 10
dhenis 4:4caae521ff66 11 InterruptIn button2(PTD2);
dhenis 4:4caae521ff66 12 DigitalOut led1(LED_RED);
dhenis 4:4caae521ff66 13 DigitalOut led2(LED_BLUE);
WilliamMarshQMUL 0:a66a8cb0012c 14
dhenis 4:4caae521ff66 15
dhenis 4:4caae521ff66 16 volatile int pressEvent1 = 0 ;
dhenis 4:4caae521ff66 17
dhenis 4:4caae521ff66 18 volatile int pressEvent2 = 0 ;
WilliamMarshQMUL 0:a66a8cb0012c 19
WilliamMarshQMUL 3:05b6a1431a6b 20 // This function is invoked when then interrupt occurs
WilliamMarshQMUL 3:05b6a1431a6b 21 // Signal that the button has been pressed
dhenis 4:4caae521ff66 22 // Note: bounce may occur
dhenis 4:4caae521ff66 23 void buttonCallback1(){
dhenis 4:4caae521ff66 24
dhenis 4:4caae521ff66 25
dhenis 4:4caae521ff66 26 pressEvent1 = 1 ;
dhenis 4:4caae521ff66 27
dhenis 4:4caae521ff66 28
WilliamMarshQMUL 0:a66a8cb0012c 29 }
dhenis 4:4caae521ff66 30 void buttonCallback2(){
dhenis 4:4caae521ff66 31
dhenis 4:4caae521ff66 32 pressEvent2 = 1 ;
WilliamMarshQMUL 0:a66a8cb0012c 33
dhenis 4:4caae521ff66 34
dhenis 4:4caae521ff66 35 }
WilliamMarshQMUL 3:05b6a1431a6b 36 /* ---- Main function (default thread) ----
WilliamMarshQMUL 3:05b6a1431a6b 37 Note that if this thread completes, nothing else works
WilliamMarshQMUL 3:05b6a1431a6b 38 */
WilliamMarshQMUL 3:05b6a1431a6b 39 int main() {
WilliamMarshQMUL 3:05b6a1431a6b 40 button.mode(PullUp); // Ensure button i/p has pull up
dhenis 4:4caae521ff66 41 button.fall(&buttonCallback1) ; // Attach function to falling edge
dhenis 4:4caae521ff66 42
dhenis 4:4caae521ff66 43
dhenis 4:4caae521ff66 44 button2.mode(PullUp); // Ensure button i/p has pull up
dhenis 4:4caae521ff66 45 button2.fall(&buttonCallback2) ; // Attach function to falling edge
dhenis 4:4caae521ff66 46
dhenis 4:4caae521ff66 47 bool flash1 = true;
dhenis 4:4caae521ff66 48
dhenis 4:4caae521ff66 49 bool flash2 = true;
dhenis 4:4caae521ff66 50
dhenis 4:4caae521ff66 51
dhenis 4:4caae521ff66 52 // bool cycle = false; //
dhenis 4:4caae521ff66 53
dhenis 4:4caae521ff66 54
dhenis 4:4caae521ff66 55 bool check_flash1 = true; // check flash one ==> make flash 1 only change once in each cycle
dhenis 4:4caae521ff66 56
dhenis 4:4caae521ff66 57 bool check_flash2 = true; // check flash one ==> make flash 1 only change once in each cycle
WilliamMarshQMUL 3:05b6a1431a6b 58
WilliamMarshQMUL 0:a66a8cb0012c 59 while(true) {
dhenis 4:4caae521ff66 60
dhenis 4:4caae521ff66 61
WilliamMarshQMUL 3:05b6a1431a6b 62 // Toggle the LED every time the button is pressed
dhenis 4:4caae521ff66 63 if (pressEvent1 and check_flash1) {
dhenis 4:4caae521ff66 64
dhenis 4:4caae521ff66 65 // led1 = 1 ; //eend turn off light as default
dhenis 4:4caae521ff66 66 flash1 = !flash1 ;
dhenis 4:4caae521ff66 67
dhenis 4:4caae521ff66 68 pressEvent1 = 0 ; // Clear the event variable
dhenis 4:4caae521ff66 69
dhenis 4:4caae521ff66 70 // dealing with bounce
dhenis 4:4caae521ff66 71 check_flash1 = false;
dhenis 4:4caae521ff66 72
dhenis 4:4caae521ff66 73 }
dhenis 4:4caae521ff66 74
dhenis 4:4caae521ff66 75 // Toggle the LED every time the button is pressed
dhenis 4:4caae521ff66 76 if (pressEvent2 and check_flash2) {
dhenis 4:4caae521ff66 77
dhenis 4:4caae521ff66 78 //led2 = 1 ; //eend turn off light as default
dhenis 4:4caae521ff66 79 flash2 = !flash2 ;
dhenis 4:4caae521ff66 80
dhenis 4:4caae521ff66 81 pressEvent2 = 0 ; // Clear the event variable
dhenis 4:4caae521ff66 82
dhenis 4:4caae521ff66 83 // dealing with bounce
dhenis 4:4caae521ff66 84 check_flash2 = false;
WilliamMarshQMUL 0:a66a8cb0012c 85 }
dhenis 4:4caae521ff66 86
dhenis 4:4caae521ff66 87
dhenis 4:4caae521ff66 88 if(flash1){
dhenis 4:4caae521ff66 89
dhenis 4:4caae521ff66 90 led1 = !led1 ;
dhenis 4:4caae521ff66 91
dhenis 4:4caae521ff66 92 }
dhenis 4:4caae521ff66 93
dhenis 4:4caae521ff66 94 if(flash2){
dhenis 4:4caae521ff66 95
dhenis 4:4caae521ff66 96 led2 = !led2 ;
dhenis 4:4caae521ff66 97 }
dhenis 4:4caae521ff66 98
dhenis 4:4caae521ff66 99
dhenis 4:4caae521ff66 100 Thread::wait(500) ; // 2x?
dhenis 4:4caae521ff66 101
dhenis 4:4caae521ff66 102 // every cycle, just make 1 instruction
dhenis 4:4caae521ff66 103
dhenis 4:4caae521ff66 104 check_flash1 = true;
dhenis 4:4caae521ff66 105
dhenis 4:4caae521ff66 106 check_flash2 = true;
dhenis 4:4caae521ff66 107
WilliamMarshQMUL 0:a66a8cb0012c 108 }
dhenis 4:4caae521ff66 109 }