A modified version of the hello world program to run using RTOS threads. Also, it cycles through seven colors on the RGB LED while it's doing its thing.
Fork of frdm_helloworld by
main.cpp@4:f52f79d2f703, 2016-08-23 (annotated)
- Committer:
- bjepson
- Date:
- Tue Aug 23 01:31:09 2016 +0000
- Revision:
- 4:f52f79d2f703
- Parent:
- 3:fd99fd0c7e60
All three functions (led cycle, two buttons) are in threads now.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Kojto | 0:4f3ac9922229 | 1 | #include "mbed.h" |
bjepson | 3:fd99fd0c7e60 | 2 | #include "rtos.h" |
Kojto | 0:4f3ac9922229 | 3 | |
Kojto | 0:4f3ac9922229 | 4 | DigitalOut led_red(LED_RED); |
Kojto | 0:4f3ac9922229 | 5 | DigitalOut led_green(LED_GREEN); |
bjepson | 3:fd99fd0c7e60 | 6 | DigitalOut led_blue(LED_BLUE); |
bjepson | 4:f52f79d2f703 | 7 | |
Kojto | 0:4f3ac9922229 | 8 | DigitalIn sw2(SW2); |
Kojto | 0:4f3ac9922229 | 9 | DigitalIn sw3(SW3); |
bjepson | 4:f52f79d2f703 | 10 | |
Kojto | 0:4f3ac9922229 | 11 | Serial pc(USBTX, USBRX); |
Kojto | 0:4f3ac9922229 | 12 | |
bjepson | 4:f52f79d2f703 | 13 | void check_sw2_thread() |
Kojto | 0:4f3ac9922229 | 14 | { |
bjepson | 3:fd99fd0c7e60 | 15 | while(true) { |
bjepson | 3:fd99fd0c7e60 | 16 | if (sw2 == 0) { |
bjepson | 3:fd99fd0c7e60 | 17 | pc.printf("SW2 button pressed. \n"); |
bjepson | 4:f52f79d2f703 | 18 | while(sw2 == 0) { // debounce |
bjepson | 4:f52f79d2f703 | 19 | Thread::wait(.3); |
bjepson | 4:f52f79d2f703 | 20 | } |
bjepson | 4:f52f79d2f703 | 21 | } |
bjepson | 4:f52f79d2f703 | 22 | Thread::wait(.3); |
bjepson | 4:f52f79d2f703 | 23 | } |
bjepson | 4:f52f79d2f703 | 24 | } |
bjepson | 4:f52f79d2f703 | 25 | |
bjepson | 4:f52f79d2f703 | 26 | void check_sw3_thread() |
bjepson | 4:f52f79d2f703 | 27 | { |
bjepson | 4:f52f79d2f703 | 28 | while(true) { |
bjepson | 4:f52f79d2f703 | 29 | if (sw3 == 0) { |
bjepson | 4:f52f79d2f703 | 30 | pc.printf("SW3 button pressed. \n"); |
bjepson | 4:f52f79d2f703 | 31 | pc.printf("5 characters will be echoed. Start typing. \n"); |
bjepson | 4:f52f79d2f703 | 32 | for (uint32_t i = 0; i < 5; i++) { |
bjepson | 4:f52f79d2f703 | 33 | pc.putc(pc.getc()); |
bjepson | 4:f52f79d2f703 | 34 | } |
bjepson | 4:f52f79d2f703 | 35 | pc.putc(13); /* CR */ |
bjepson | 4:f52f79d2f703 | 36 | pc.putc(10); /* LF */ |
bjepson | 3:fd99fd0c7e60 | 37 | } |
bjepson | 3:fd99fd0c7e60 | 38 | Thread::wait(.3); |
Kojto | 0:4f3ac9922229 | 39 | } |
Kojto | 0:4f3ac9922229 | 40 | } |
Kojto | 0:4f3ac9922229 | 41 | |
bjepson | 4:f52f79d2f703 | 42 | // Cycle through seven colors |
bjepson | 4:f52f79d2f703 | 43 | void strobe_led_thread() |
Kojto | 0:4f3ac9922229 | 44 | { |
bjepson | 4:f52f79d2f703 | 45 | while(true) { |
bjepson | 4:f52f79d2f703 | 46 | for (int i = 0; i < 8; i++) { |
bjepson | 4:f52f79d2f703 | 47 | led_red = !(i & 0x01); |
bjepson | 4:f52f79d2f703 | 48 | led_green = !(i & 0x02); |
bjepson | 4:f52f79d2f703 | 49 | led_blue = !(i & 0x04); |
bjepson | 4:f52f79d2f703 | 50 | wait(0.5); |
Kojto | 0:4f3ac9922229 | 51 | } |
Kojto | 0:4f3ac9922229 | 52 | } |
Kojto | 0:4f3ac9922229 | 53 | } |
Kojto | 0:4f3ac9922229 | 54 | |
bjepson | 3:fd99fd0c7e60 | 55 | int main() |
bjepson | 3:fd99fd0c7e60 | 56 | { |
Kojto | 0:4f3ac9922229 | 57 | pc.baud(115200); |
Kojto | 0:4f3ac9922229 | 58 | pc.printf("Hello World from FRDM-K64F board.\n"); |
Kojto | 0:4f3ac9922229 | 59 | |
bjepson | 4:f52f79d2f703 | 60 | Thread sw2thread; |
bjepson | 4:f52f79d2f703 | 61 | osStatus err = sw2thread.start(&check_sw2_thread); |
bjepson | 4:f52f79d2f703 | 62 | if (err) { |
bjepson | 4:f52f79d2f703 | 63 | pc.printf("%d", err); |
bjepson | 4:f52f79d2f703 | 64 | } |
bjepson | 4:f52f79d2f703 | 65 | |
bjepson | 4:f52f79d2f703 | 66 | Thread sw3thread; |
bjepson | 4:f52f79d2f703 | 67 | err = sw3thread.start(&check_sw3_thread); |
bjepson | 4:f52f79d2f703 | 68 | if (err) { |
bjepson | 4:f52f79d2f703 | 69 | pc.printf("%d", err); |
bjepson | 4:f52f79d2f703 | 70 | } |
bjepson | 3:fd99fd0c7e60 | 71 | |
bjepson | 4:f52f79d2f703 | 72 | Thread strobethread; |
bjepson | 4:f52f79d2f703 | 73 | err = strobethread.start(&strobe_led_thread); |
bjepson | 4:f52f79d2f703 | 74 | if (err) { |
bjepson | 4:f52f79d2f703 | 75 | pc.printf("%d", err); |
bjepson | 4:f52f79d2f703 | 76 | } |
bjepson | 3:fd99fd0c7e60 | 77 | |
bjepson | 4:f52f79d2f703 | 78 | // wait for threads to terminate |
bjepson | 4:f52f79d2f703 | 79 | sw2thread.join(); |
bjepson | 4:f52f79d2f703 | 80 | sw3thread.join(); |
bjepson | 4:f52f79d2f703 | 81 | strobethread.join(); |
Kojto | 0:4f3ac9922229 | 82 | } |