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:
- 2018-01-16
- Revision:
- 2:cd1fe8c29793
- Parent:
- 1:4709af498799
- Child:
- 3:8d87cbabe37e
File content as of revision 2:cd1fe8c29793:
#include "mbed.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 (the default one) checks for the press event and toggles the LED
DigitalIn b1(PTD0, PullUp);
DigitalOut led(LED1);
Thread pollT ; // thread to poll
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 (!b1.read()) { // now down
pressEvent = 1 ; // transition occurred
pos = down ;
}
break ;
case down :
if (b1 == 1) { // no longer down
bcounter = 3 ; // wait four cycles
pos = bounce ;
}
break ;
case bounce :
if (b1 == 0) { // 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);
}
}
/* ---- Main function (default thread) ----
Note that if this thread completes, nothing else works
*/
int main() {
led = 1 ; // Initially off
pollT.start(callback(polling));
while(true) {
if (pressEvent) {
pressEvent = 0 ; // clear the event variable
led = !led ;
}
Thread::wait(100) ;
}
}