Solution to Interrupt Exercise

Fork of digitalInInterrupt_sample by William Marsh

main.cpp

Committer:
Sarang
Date:
2018-02-01
Revision:
4:60cc36256d3e
Parent:
3:05b6a1431a6b

File content as of revision 4:60cc36256d3e:

#include "mbed.h"

// Labs 2: Example program for using an interrupt (or callback)
// -----------------------------------------------------------
// A callback function (corresponding to an ISR) is called when a button 
//    is pressed
// The callback uses a shared variable to signal another thread

InterruptIn button(PTD0);
InterruptIn button1(PTD2);
DigitalOut led(LED_RED);
DigitalOut led1(LED_BLUE);

volatile int pressEvent = 0 ;
volatile int pressEvent1 = 0 ;
volatile int timez = 500 ;

volatile int buttonpressed  = 1;
volatile int buttonpressed1  = 1;


// This function is invoked when then interrupt occurs
//   Signal that the button has been pressed
//   Note: bounce may occur 
void buttonCallback()

{
    pressEvent = 1 ;
}

void buttonCallback1()

{
    pressEvent1 = 1 ;
}

/*  ---- Main function (default thread) ----
    Note that if this thread completes, nothing else works
 */
int main() {
    button.mode(PullUp);             // Ensure button i/p has pull up
    button.fall(&buttonCallback) ;   // Attach function to falling edge
    
    button1.mode(PullUp);
    button1.fall(&buttonCallback1);

    while(true) {
        // Toggle the LED every time the button is pressed
    
        if (pressEvent) {
          
          buttonpressed = !buttonpressed;
          
            pressEvent = 0 ; // Clear the event variable
        }
        
         if (pressEvent1) {
          
          buttonpressed1 = !buttonpressed1;
          
            pressEvent1 = 0 ; // Clear the event variable
        }
            
        if (buttonpressed){
            
            led =!led;
            }
            
        if (buttonpressed1){
        
            led1 =!led1;
            }
            
        
        Thread::wait(timez) ;
    }
}