Marco Calzana
/
BlinkButton2Sec
exercise1
main.cpp@0:d063ac0284dc, 2018-11-28 (annotated)
- Committer:
- mcalzana
- Date:
- Wed Nov 28 17:12:03 2018 +0000
- Revision:
- 0:d063ac0284dc
exercise1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mcalzana | 0:d063ac0284dc | 1 | #include "mbed.h" |
mcalzana | 0:d063ac0284dc | 2 | |
mcalzana | 0:d063ac0284dc | 3 | DigitalOut led1(LED1); |
mcalzana | 0:d063ac0284dc | 4 | InterruptIn button(USER_BUTTON); |
mcalzana | 0:d063ac0284dc | 5 | EventQueue queue(32 * EVENTS_EVENT_SIZE); |
mcalzana | 0:d063ac0284dc | 6 | Thread t; |
mcalzana | 0:d063ac0284dc | 7 | volatile static time_t begin; |
mcalzana | 0:d063ac0284dc | 8 | volatile static int pressCount = 0; |
mcalzana | 0:d063ac0284dc | 9 | |
mcalzana | 0:d063ac0284dc | 10 | void blinkLed1(void){ |
mcalzana | 0:d063ac0284dc | 11 | led1 = 1; |
mcalzana | 0:d063ac0284dc | 12 | wait(0.5); |
mcalzana | 0:d063ac0284dc | 13 | led1 = 0; |
mcalzana | 0:d063ac0284dc | 14 | } |
mcalzana | 0:d063ac0284dc | 15 | |
mcalzana | 0:d063ac0284dc | 16 | void rise_handler_thread_context(void) { |
mcalzana | 0:d063ac0284dc | 17 | printf("Button pressed. count = %d\n", pressCount); |
mcalzana | 0:d063ac0284dc | 18 | if(pressCount == 1){ |
mcalzana | 0:d063ac0284dc | 19 | begin = time(NULL); |
mcalzana | 0:d063ac0284dc | 20 | }else{ |
mcalzana | 0:d063ac0284dc | 21 | pressCount = 0; |
mcalzana | 0:d063ac0284dc | 22 | if(time(NULL) - begin < 2){ |
mcalzana | 0:d063ac0284dc | 23 | printf("Blinking"); |
mcalzana | 0:d063ac0284dc | 24 | blinkLed1(); |
mcalzana | 0:d063ac0284dc | 25 | } |
mcalzana | 0:d063ac0284dc | 26 | } |
mcalzana | 0:d063ac0284dc | 27 | } |
mcalzana | 0:d063ac0284dc | 28 | |
mcalzana | 0:d063ac0284dc | 29 | void rise_handler_iterrupt_context(void) { |
mcalzana | 0:d063ac0284dc | 30 | pressCount += 1; |
mcalzana | 0:d063ac0284dc | 31 | queue.call(rise_handler_thread_context); |
mcalzana | 0:d063ac0284dc | 32 | } |
mcalzana | 0:d063ac0284dc | 33 | |
mcalzana | 0:d063ac0284dc | 34 | int main() { |
mcalzana | 0:d063ac0284dc | 35 | // Start the event queue |
mcalzana | 0:d063ac0284dc | 36 | t.start(callback(&queue, &EventQueue::dispatch_forever)); |
mcalzana | 0:d063ac0284dc | 37 | printf("Starting in context %p\r\n", Thread::gettid()); |
mcalzana | 0:d063ac0284dc | 38 | // The 'rise' handler will execute in IRQ context |
mcalzana | 0:d063ac0284dc | 39 | button.rise(rise_handler_iterrupt_context); |
mcalzana | 0:d063ac0284dc | 40 | } |