rough draft - doesn't work

Dependencies:   TextLCD mbed-rtos mbed

Committer:
xueliz
Date:
Mon Oct 06 20:40:53 2014 +0000
Revision:
4:f6eee8bb51c2
Parent:
3:6fad2a5b72e5
Child:
5:f5f4b730a6fb
using signals

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jfields 0:c204b3ecd227 1 #include "mbed.h"
jfields 0:c204b3ecd227 2 #include "rtos.h"
jfields 0:c204b3ecd227 3 #include "TextLCD.h"
jfields 0:c204b3ecd227 4
xueliz 3:6fad2a5b72e5 5 #define RUN 0x1
xueliz 3:6fad2a5b72e5 6 #define STOP 0x0
xueliz 3:6fad2a5b72e5 7
jfields 0:c204b3ecd227 8 TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD16x2);
jfields 0:c204b3ecd227 9 Serial pc (USBTX, USBRX);
jfields 0:c204b3ecd227 10 DigitalOut myled(LED1);
xueliz 3:6fad2a5b72e5 11
jfields 0:c204b3ecd227 12
jfields 0:c204b3ecd227 13
jfields 0:c204b3ecd227 14 // global vars
jfields 0:c204b3ecd227 15 int mm [] = {0, 0};
jfields 0:c204b3ecd227 16 int ss [] = {0, 0};
jfields 0:c204b3ecd227 17 int MM [] = {0, 0};
xueliz 3:6fad2a5b72e5 18 int run_status = STOP;
jfields 0:c204b3ecd227 19
jfields 0:c204b3ecd227 20 // functions
jfields 0:c204b3ecd227 21 void update_display(void const *args);
jfields 0:c204b3ecd227 22 void update_mm(void const *args);
jfields 0:c204b3ecd227 23 void update_ss(void const *args);
jfields 0:c204b3ecd227 24 void update_MM(void const *args);
jfields 0:c204b3ecd227 25
jfields 0:c204b3ecd227 26 int main() {
jfields 0:c204b3ecd227 27
jfields 0:c204b3ecd227 28 Thread thread_display(update_display);
xueliz 3:6fad2a5b72e5 29 Thread thread_mm(update_mm);
xueliz 3:6fad2a5b72e5 30 Thread thread_ss(update_ss);
xueliz 3:6fad2a5b72e5 31 Thread thread_MM(update_MM);
xueliz 2:91cb258f9745 32 char input = 'z';
xueliz 3:6fad2a5b72e5 33
xueliz 2:91cb258f9745 34 while(1) {
xueliz 2:91cb258f9745 35 if ( input == 's') {
xueliz 3:6fad2a5b72e5 36 if (run_status==STOP) {
xueliz 4:f6eee8bb51c2 37 run_status = RUN;
xueliz 3:6fad2a5b72e5 38 thread_mm.signal_set(RUN);
xueliz 3:6fad2a5b72e5 39 thread_ss.signal_set(RUN);
xueliz 3:6fad2a5b72e5 40 thread_MM.signal_set(RUN);
xueliz 3:6fad2a5b72e5 41 thread_display.signal_set(RUN);
xueliz 4:f6eee8bb51c2 42
xueliz 2:91cb258f9745 43 }
xueliz 2:91cb258f9745 44 }
xueliz 2:91cb258f9745 45 if ( input == 'p') {
xueliz 3:6fad2a5b72e5 46 if (run_status==RUN) {
xueliz 3:6fad2a5b72e5 47 run_status = STOP;
xueliz 2:91cb258f9745 48 }
xueliz 2:91cb258f9745 49 }
xueliz 2:91cb258f9745 50 if ( input == 'r') {
xueliz 4:f6eee8bb51c2 51 if (run_status == STOP) {
xueliz 2:91cb258f9745 52 mm[0] = mm[1] = 0;
xueliz 2:91cb258f9745 53 ss[0] = ss[1] = 0;
xueliz 2:91cb258f9745 54 MM[0] = MM[1] = 0;
xueliz 3:6fad2a5b72e5 55 thread_display.signal_set(RUN);
xueliz 2:91cb258f9745 56 }
xueliz 2:91cb258f9745 57 }
xueliz 2:91cb258f9745 58
xueliz 2:91cb258f9745 59 input = pc.getc();
jfields 0:c204b3ecd227 60 }
xueliz 2:91cb258f9745 61
jfields 0:c204b3ecd227 62 }
jfields 0:c204b3ecd227 63
jfields 0:c204b3ecd227 64 void update_display(void const *args) {
jfields 0:c204b3ecd227 65 while (1) {
jfields 0:c204b3ecd227 66 lcd.printf("%d%d:%d%d:%d%d\n\n", MM[1], MM[0],ss[1],ss[0],mm[1],mm[0]);
xueliz 3:6fad2a5b72e5 67 Thread::signal_wait(RUN);
xueliz 3:6fad2a5b72e5 68 while (run_status) {
xueliz 3:6fad2a5b72e5 69 lcd.printf("%d%d:%d%d:%d%d\n\n", MM[1], MM[0],ss[1],ss[0],mm[1],mm[0]);
xueliz 3:6fad2a5b72e5 70 Thread::wait(10);
xueliz 3:6fad2a5b72e5 71 }
jfields 0:c204b3ecd227 72 }
jfields 0:c204b3ecd227 73 }
jfields 0:c204b3ecd227 74
jfields 0:c204b3ecd227 75 void update_mm(void const *args) {
xueliz 3:6fad2a5b72e5 76 while(1){
xueliz 3:6fad2a5b72e5 77 Thread::signal_wait(RUN);
xueliz 4:f6eee8bb51c2 78 Thread::wait(10-mm[0]);
xueliz 4:f6eee8bb51c2 79 mm[0]++;
xueliz 4:f6eee8bb51c2 80 if (mm[0] >= 10) {
xueliz 4:f6eee8bb51c2 81 mm[0] = 0;
xueliz 4:f6eee8bb51c2 82 mm[1]++;
xueliz 4:f6eee8bb51c2 83 }
xueliz 4:f6eee8bb51c2 84 if (mm[1] >= 10) {
xueliz 4:f6eee8bb51c2 85 mm[0] = 0;
xueliz 4:f6eee8bb51c2 86 mm[1] = 0;
xueliz 4:f6eee8bb51c2 87 }
xueliz 3:6fad2a5b72e5 88 while (run_status) {
xueliz 3:6fad2a5b72e5 89 Thread::wait(10);
xueliz 3:6fad2a5b72e5 90 mm[0]++;
xueliz 3:6fad2a5b72e5 91 if (mm[0] >= 10) {
xueliz 3:6fad2a5b72e5 92 mm[0] = 0;
xueliz 3:6fad2a5b72e5 93 mm[1]++;
xueliz 3:6fad2a5b72e5 94 }
xueliz 3:6fad2a5b72e5 95 if (mm[1] >= 10) {
xueliz 3:6fad2a5b72e5 96 mm[0] = 0;
xueliz 3:6fad2a5b72e5 97 mm[1] = 0;
xueliz 3:6fad2a5b72e5 98 }
jfields 1:38e744366b97 99 }
jfields 0:c204b3ecd227 100 }
jfields 0:c204b3ecd227 101 }
jfields 1:38e744366b97 102
jfields 0:c204b3ecd227 103 void update_ss(void const *args) {
xueliz 3:6fad2a5b72e5 104 while(1) {
xueliz 3:6fad2a5b72e5 105 Thread::signal_wait(RUN);
xueliz 4:f6eee8bb51c2 106 Thread::wait(1000-100*mm[1]-10*mm[0]);
xueliz 4:f6eee8bb51c2 107 ss[0]++;
xueliz 4:f6eee8bb51c2 108 if (ss[0] >= 10) {
xueliz 4:f6eee8bb51c2 109 ss[0] = 0;
xueliz 4:f6eee8bb51c2 110 ss[1]++;
xueliz 4:f6eee8bb51c2 111 }
xueliz 4:f6eee8bb51c2 112 if (ss[1] >= 6) {
xueliz 4:f6eee8bb51c2 113 ss[0] = 0;
xueliz 4:f6eee8bb51c2 114 ss[1] = 0;
xueliz 4:f6eee8bb51c2 115 }
xueliz 3:6fad2a5b72e5 116 while (run_status) {
xueliz 3:6fad2a5b72e5 117 Thread::wait(1000);
xueliz 3:6fad2a5b72e5 118 ss[0]++;
xueliz 3:6fad2a5b72e5 119 if (ss[0] >= 10) {
xueliz 3:6fad2a5b72e5 120 ss[0] = 0;
xueliz 3:6fad2a5b72e5 121 ss[1]++;
xueliz 3:6fad2a5b72e5 122 }
xueliz 3:6fad2a5b72e5 123 if (ss[1] >= 6) {
xueliz 3:6fad2a5b72e5 124 ss[0] = 0;
xueliz 3:6fad2a5b72e5 125 ss[1] = 0;
xueliz 3:6fad2a5b72e5 126 }
jfields 1:38e744366b97 127 }
jfields 0:c204b3ecd227 128 }
jfields 0:c204b3ecd227 129 }
jfields 0:c204b3ecd227 130
jfields 0:c204b3ecd227 131 void update_MM(void const *args) {
xueliz 3:6fad2a5b72e5 132 while(1) {
xueliz 3:6fad2a5b72e5 133 Thread::signal_wait(RUN);
xueliz 4:f6eee8bb51c2 134 Thread::wait(60000-10000*ss[1]-1000*ss[0]-100*mm[1]-10*mm[0]);
xueliz 4:f6eee8bb51c2 135 MM[0]++;
xueliz 4:f6eee8bb51c2 136 if (MM[0] >= 10) {
xueliz 4:f6eee8bb51c2 137 MM[0] = 0;
xueliz 4:f6eee8bb51c2 138 MM[1]++;
xueliz 4:f6eee8bb51c2 139 }
xueliz 4:f6eee8bb51c2 140 if (MM[1] >= 6) {
xueliz 4:f6eee8bb51c2 141 MM[0] = 0;
xueliz 4:f6eee8bb51c2 142 MM[1] = 0;
xueliz 4:f6eee8bb51c2 143 }
xueliz 3:6fad2a5b72e5 144 while (run_status) {
xueliz 3:6fad2a5b72e5 145 Thread::wait(60000);
xueliz 3:6fad2a5b72e5 146 MM[0]++;
xueliz 3:6fad2a5b72e5 147 if (MM[0] >= 10) {
xueliz 3:6fad2a5b72e5 148 MM[0] = 0;
xueliz 3:6fad2a5b72e5 149 MM[1]++;
xueliz 3:6fad2a5b72e5 150 }
xueliz 3:6fad2a5b72e5 151 if (MM[1] >= 6) {
xueliz 3:6fad2a5b72e5 152 MM[0] = 0;
xueliz 3:6fad2a5b72e5 153 MM[1] = 0;
xueliz 3:6fad2a5b72e5 154 }
jfields 1:38e744366b97 155 }
jfields 0:c204b3ecd227 156 }
jfields 0:c204b3ecd227 157 }