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.
Fork of digitalInPolling_sample by
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
}
