rough draft - doesn't work
Dependencies: TextLCD mbed-rtos mbed
main.cpp
- Committer:
- xueliz
- Date:
- 2014-10-03
- Revision:
- 3:6fad2a5b72e5
- Parent:
- 2:91cb258f9745
- Child:
- 4:f6eee8bb51c2
File content as of revision 3:6fad2a5b72e5:
#include "mbed.h" #include "rtos.h" #include "TextLCD.h" #define RUN 0x1 #define STOP 0x0 TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD16x2); Serial pc (USBTX, USBRX); DigitalOut myled(LED1); // global vars int mm [] = {0, 0}; int ss [] = {0, 0}; int MM [] = {0, 0}; int run_status = STOP; // functions void update_display(void const *args); void update_mm(void const *args); void update_ss(void const *args); void update_MM(void const *args); int main() { Thread thread_display(update_display); Thread thread_mm(update_mm); Thread thread_ss(update_ss); Thread thread_MM(update_MM); char input = 'z'; while(1) { if ( input == 's') { if (run_status==STOP) { thread_mm.signal_set(RUN); thread_ss.signal_set(RUN); thread_MM.signal_set(RUN); thread_display.signal_set(RUN); run_status = RUN; } } if ( input == 'p') { if (run_status==RUN) { run_status = STOP; } } if ( input == 'r') { if (run_status == 0) { mm[0] = mm[1] = 0; ss[0] = ss[1] = 0; MM[0] = MM[1] = 0; thread_display.signal_set(RUN); } } input = pc.getc(); } } void update_display(void const *args) { while (1) { lcd.printf("%d%d:%d%d:%d%d\n\n", MM[1], MM[0],ss[1],ss[0],mm[1],mm[0]); Thread::signal_wait(RUN); while (run_status) { lcd.printf("%d%d:%d%d:%d%d\n\n", MM[1], MM[0],ss[1],ss[0],mm[1],mm[0]); Thread::wait(10); } } } void update_mm(void const *args) { while(1){ Thread::signal_wait(RUN); while (run_status) { Thread::wait(10); mm[0]++; if (mm[0] >= 10) { mm[0] = 0; mm[1]++; } if (mm[1] >= 10) { mm[0] = 0; mm[1] = 0; } } } } void update_ss(void const *args) { while(1) { Thread::signal_wait(RUN); while (run_status) { Thread::wait(1000); ss[0]++; if (ss[0] >= 10) { ss[0] = 0; ss[1]++; } if (ss[1] >= 6) { ss[0] = 0; ss[1] = 0; } } } } void update_MM(void const *args) { while(1) { Thread::signal_wait(RUN); while (run_status) { Thread::wait(60000); MM[0]++; if (MM[0] >= 10) { MM[0] = 0; MM[1]++; } if (MM[1] >= 6) { MM[0] = 0; MM[1] = 0; } } } }