University of Plymouth - Stages 1, 2 and 3 / Mbed OS Task330

main.cpp

Committer:
noutram
Date:
2017-10-23
Revision:
2:ca251bdda621
Parent:
1:e84a51c98d75
Child:
3:a39db8aa11e8

File content as of revision 2:ca251bdda621:

#include "mbed.h"

#define N 1000000
#define RELEASED 0
#define PRESSED  1

//Function prototypes
void blockOnSwitch1();
void blockOnSwitch2();

//Hardware objects
DigitalOut red_led(PE_15);     //CountUp is in its critical section
DigitalOut yellow_led(PB_10);  //CountDown is in its critical section
DigitalOut green_led(PB_11);   //counter != 0
DigitalOut onboardLED(LED1);

DigitalIn button(USER_BUTTON);
DigitalIn sw1(PE_12);
DigitalIn sw2(PE_14);

//The code below is hugely flawed and is only to
//illustrate the problem of blocking hardware
int main() {
    
    //Light up
    red_led    = 1;
    yellow_led = 1;
    green_led  = 1;
    onboardLED = 1;
    
    //Now loop forever
    while(1) { 
        
        //Wait for user to press and release sw1
        blockOnSwitch1();

        //Wait for user to press and release sw2
        blockOnSwitch2();

        //Flash the yellow
        yellow_led = !yellow_led;
        wait(0.5);
    };
}


//Thread 1  - polling sw1 and controlling the red LED
void blockOnSwitch1()
{
    //Spin on sw1
    while (sw1 == RELEASED) {};
    //Allow short delay for switch bounce
    wait(0.2);
    //Spin again on sw1
    while (sw1 == PRESSED) {};    
    //Toggle LED
    red_led = !red_led;
    //Again, wait for switch bounce
    wait(0.2);
}

//Thread 2  - polling sw2 and controlling the green LED
void blockOnSwitch2()
{
    //Spin on sw2
    while (sw2 == RELEASED) {};
    //Allow short delay for switch bounce
    wait(0.2);
    //Spin again on sw2
    while (sw2 == PRESSED) {};    
    //Toggle LED
    green_led = !green_led;
    //Again, wait for switch bounce
    wait(0.2);  
}