Rafal Magda
/
HelloWorldButton
HelloWorld with Button
Fork of events_ex_1 by
main.cpp@4:18e37cfe2fa1, 2018-03-08 (annotated)
- 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?
User | Revision | Line number | New 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 | } |