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.
Diff: main.cpp
- Revision:
- 0:a66a8cb0012c
- Child:
- 1:4709af498799
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Mon Jan 23 13:53:49 2017 +0000
@@ -0,0 +1,65 @@
+#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
+}
\ No newline at end of file