HelloWorld with Button

Fork of events_ex_1 by mbed_example

Committer:
rafalmag
Date:
Thu Mar 08 23:04:59 2018 +0000
Revision:
4:18e37cfe2fa1
Parent:
3:f3c40f098a11
fixed compiler warnings

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mab5449 0:aea2e03f5625 1 #include "mbed.h"
mab5449 0:aea2e03f5625 2 #include "mbed_events.h"
mab5449 0:aea2e03f5625 3
rafalmag 3:f3c40f098a11 4
mab5449 0:aea2e03f5625 5 DigitalOut led1(LED1);
rafalmag 4:18e37cfe2fa1 6 Thread thread;
rafalmag 3:f3c40f098a11 7
rafalmag 3:f3c40f098a11 8 InterruptIn button1(USER_BUTTON);
rafalmag 3:f3c40f098a11 9 volatile bool button1_pressed = false; // Used in the main loop
rafalmag 3:f3c40f098a11 10 volatile bool button1_enabled = true; // Used for debouncing
rafalmag 3:f3c40f098a11 11 Timeout button1_timeout; // Used for debouncing
mab5449 0:aea2e03f5625 12
rafalmag 3:f3c40f098a11 13 // Enables button when bouncing is over
rafalmag 3:f3c40f098a11 14 void button1_enabled_cb(void)
rafalmag 3:f3c40f098a11 15 {
rafalmag 3:f3c40f098a11 16 button1_enabled = true;
rafalmag 3:f3c40f098a11 17 }
rafalmag 3:f3c40f098a11 18
rafalmag 3:f3c40f098a11 19 // ISR handling button event
rafalmag 3:f3c40f098a11 20 void button1_onEvent_cb(void)
rafalmag 3:f3c40f098a11 21 {
rafalmag 3:f3c40f098a11 22 if (button1_enabled) { // Should be disabled while the button is bouncing
rafalmag 3:f3c40f098a11 23 button1_enabled = false;
rafalmag 3:f3c40f098a11 24 button1_pressed = true; // To be read by the main loop
rafalmag 3:f3c40f098a11 25 // as commented out the "debuncer is broken"
rafalmag 3:f3c40f098a11 26 // button1_timeout.attach(callback(button1_enabled_cb), 0.3); // Debounce time 300 ms
rafalmag 3:f3c40f098a11 27 button1_enabled_cb();
rafalmag 3:f3c40f098a11 28 }
mab5449 0:aea2e03f5625 29 }
mab5449 0:aea2e03f5625 30
rafalmag 4:18e37cfe2fa1 31 void led_thread()
rafalmag 3:f3c40f098a11 32 {
rafalmag 3:f3c40f098a11 33 while (true) {
rafalmag 3:f3c40f098a11 34 if(button1.read()==1) {
rafalmag 3:f3c40f098a11 35 // blink when not_pressed
rafalmag 3:f3c40f098a11 36 printf("blink\r\n");
rafalmag 3:f3c40f098a11 37 led1 = 1; // LED is ON
rafalmag 3:f3c40f098a11 38 Thread::wait(200); //ms
rafalmag 3:f3c40f098a11 39 led1 = 0; // LED is OFF
rafalmag 3:f3c40f098a11 40 }
rafalmag 3:f3c40f098a11 41 Thread::wait(2000); //ms
rafalmag 3:f3c40f098a11 42 }
mab5449 0:aea2e03f5625 43 }
mab5449 0:aea2e03f5625 44
rafalmag 3:f3c40f098a11 45 int main()
rafalmag 3:f3c40f098a11 46 {
rafalmag 3:f3c40f098a11 47 button1.mode(PullUp); // Activate pull-up
rafalmag 3:f3c40f098a11 48 button1.fall(callback(button1_onEvent_cb)); // Attach ISR to handle button press event
rafalmag 3:f3c40f098a11 49 button1.rise(callback(button1_onEvent_cb)); // Attach ISR to handle button rise event
rafalmag 4:18e37cfe2fa1 50 Thread thread;
rafalmag 4:18e37cfe2fa1 51 thread.start(led_thread);
rafalmag 3:f3c40f098a11 52
rafalmag 3:f3c40f098a11 53 int idx = 0; // Just for printf below
rafalmag 3:f3c40f098a11 54
rafalmag 3:f3c40f098a11 55 while(1) {
rafalmag 3:f3c40f098a11 56 if (button1_pressed) { // Set when button is pressed
rafalmag 3:f3c40f098a11 57 button1_pressed = false;
rafalmag 3:f3c40f098a11 58
rafalmag 3:f3c40f098a11 59 if(button1.read()==0) {
rafalmag 3:f3c40f098a11 60 printf("Button pressed %d\r\n", idx++);
rafalmag 3:f3c40f098a11 61 led1=1; // LED ON
rafalmag 3:f3c40f098a11 62 } else {
rafalmag 3:f3c40f098a11 63 printf("Button released %d\r\n", idx++);
rafalmag 3:f3c40f098a11 64 led1=0; // LED OFF
rafalmag 3:f3c40f098a11 65 }
rafalmag 3:f3c40f098a11 66 }
rafalmag 3:f3c40f098a11 67 }
mab5449 0:aea2e03f5625 68 }