Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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);
}