lab 2 program A

Committer:
duncangparker
Date:
Thu Jan 24 09:53:55 2019 +0000
Revision:
5:9b473d97bbf7
Parent:
4:728667196916
First program for lab2

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
duncangparker 5:9b473d97bbf7 9 InterruptIn button_G(PTD0);
duncangparker 5:9b473d97bbf7 10 InterruptIn button_B(PTD5);
WilliamMarshQMUL 0:a66a8cb0012c 11
duncangparker 5:9b473d97bbf7 12 DigitalOut led_G(LED_GREEN);
duncangparker 5:9b473d97bbf7 13 DigitalOut led_B(LED_BLUE);
duncangparker 5:9b473d97bbf7 14
duncangparker 5:9b473d97bbf7 15 volatile int pressEvent_G = 0 ;
duncangparker 5:9b473d97bbf7 16 volatile int pressEvent_B = 0 ;
WilliamMarshQMUL 0:a66a8cb0012c 17
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
duncangparker 5:9b473d97bbf7 21 void buttonCallback_G(){
duncangparker 5:9b473d97bbf7 22 pressEvent_G = 1 ;
duncangparker 5:9b473d97bbf7 23 }
duncangparker 5:9b473d97bbf7 24
duncangparker 5:9b473d97bbf7 25 void buttonCallback_B(){
duncangparker 5:9b473d97bbf7 26 pressEvent_B = 1 ;
WilliamMarshQMUL 0:a66a8cb0012c 27 }
WilliamMarshQMUL 0:a66a8cb0012c 28
WilliamMarshQMUL 3:05b6a1431a6b 29 /* ---- Main function (default thread) ----
WilliamMarshQMUL 3:05b6a1431a6b 30 Note that if this thread completes, nothing else works
WilliamMarshQMUL 3:05b6a1431a6b 31 */
WilliamMarshQMUL 3:05b6a1431a6b 32 int main() {
duncangparker 5:9b473d97bbf7 33 button_G.mode(PullUp); // Ensure button i/p has pull up
duncangparker 5:9b473d97bbf7 34 button_G.fall(&buttonCallback_G) ; // Attach function to falling edge
duncangparker 5:9b473d97bbf7 35
duncangparker 5:9b473d97bbf7 36 button_B.mode(PullUp); // Ensure button i/p has pull up
duncangparker 5:9b473d97bbf7 37 button_B.fall(&buttonCallback_B) ; // Attach function to falling edge
duncangparker 5:9b473d97bbf7 38
duncangparker 5:9b473d97bbf7 39 //int counter_G = 2;
duncangparker 5:9b473d97bbf7 40 //int rate_G = 1;
duncangparker 5:9b473d97bbf7 41
duncangparker 5:9b473d97bbf7 42 //int counter_B = 2;
duncangparker 5:9b473d97bbf7 43 //int rate_B = 1;
duncangparker 5:9b473d97bbf7 44
duncangparker 5:9b473d97bbf7 45 bool on_G = 0;
duncangparker 5:9b473d97bbf7 46 bool on_B = 0;
WilliamMarshQMUL 3:05b6a1431a6b 47
WilliamMarshQMUL 0:a66a8cb0012c 48 while(true) {
duncangparker 5:9b473d97bbf7 49 // Toggle the Green LED every time the button is pressed
duncangparker 5:9b473d97bbf7 50 if (pressEvent_G) {
duncangparker 5:9b473d97bbf7 51 //led_G = !led_G ;
duncangparker 5:9b473d97bbf7 52 pressEvent_G = 0 ; // Clear the event variable
duncangparker 5:9b473d97bbf7 53 on_G = !on_G;
WilliamMarshQMUL 0:a66a8cb0012c 54 }
duncangparker 5:9b473d97bbf7 55
duncangparker 5:9b473d97bbf7 56 // Toggle the Green LED every time the button is pressed
duncangparker 5:9b473d97bbf7 57 if (pressEvent_B) {
duncangparker 5:9b473d97bbf7 58 //led_B = !led_B ;
duncangparker 5:9b473d97bbf7 59 pressEvent_B = 0 ; // Clear the event variable
duncangparker 5:9b473d97bbf7 60 on_B = !on_B;
duncangparker 5:9b473d97bbf7 61 }
duncangparker 5:9b473d97bbf7 62
duncangparker 5:9b473d97bbf7 63 led_G = (!led_G)|on_G;
duncangparker 5:9b473d97bbf7 64 led_B = (!led_B)|on_B;
duncangparker 5:9b473d97bbf7 65
duncangparker 5:9b473d97bbf7 66 wait(0.5) ;
WilliamMarshQMUL 0:a66a8cb0012c 67 }
WilliamMarshQMUL 0:a66a8cb0012c 68 }