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:
- WilliamMarshQMUL
- Date:
- 2017-01-23
- Revision:
- 0:a66a8cb0012c
- Child:
- 1:4709af498799
File content as of revision 0:a66a8cb0012c:
#include "mbed.h"
#include "rtos.h"
// Labs 2: Example program for polling an input
// --------------------------------------------
// The program uses a thread to poll a digital input
// - The thread monitors the position of the button
// - When the button transitions up and down, a press event is signaled
// - Button bounce is guarded against
// A second thread checks for the press event and toggles the LED
DigitalIn button(PTD0, PullUp);
DigitalOut led(LED_RED);
Thread pollT ; // thread to poll
Thread flashT ; // thread to flash light
volatile int pressEvent = 0 ; // Variabe set by the polling thread
enum buttonPos { up, down, bounce }; // Button positions
void polling() {
buttonPos pos = up ;
int bcounter = 0 ;
while (true) {
switch (pos) {
case up :
if (button == 1) { // now down
pressEvent = 1 ; // transition occurred
pos = down ;
}
break ;
case down :
if (button == 0) { // no longer down
bcounter = 3 ; // wait four cycles
pos = bounce ;
}
break ;
case bounce :
if (button == 1) { // down again - button has bounced
pos = down ; // no event
} else if (bcounter == 0) {
pos = up ; // delay passed - reset to up
} else {
bcounter-- ; // continue waiting
}
break ;
}
Thread::wait(30);
}
}
// Toggle the LED every time the button is pressed
void flash() {
while(true) {
if (pressEvent) {
pressEvent = 0 ; // clear the event variable
led = !led ;
}
Thread::wait(100) ;
}
}
int main() {
pollT.start(&polling) ; // start the polling thread running
flashT.start(&flash) ; // start the flashing thread running
}