rough draft - doesn't work

Dependencies:   TextLCD mbed-rtos mbed

Committer:
xueliz
Date:
Mon Oct 06 20:55:33 2014 +0000
Revision:
5:f5f4b730a6fb
Parent:
4:f6eee8bb51c2
using signal v2

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 5:f5f4b730a6fb 18 int mm_stop [] = {0, 0};
xueliz 5:f5f4b730a6fb 19 int ss_stop [] = {0, 0};
xueliz 5:f5f4b730a6fb 20 int MM_stop [] = {0, 0};
xueliz 5:f5f4b730a6fb 21
xueliz 3:6fad2a5b72e5 22 int run_status = STOP;
jfields 0:c204b3ecd227 23
jfields 0:c204b3ecd227 24 // functions
jfields 0:c204b3ecd227 25 void update_display(void const *args);
jfields 0:c204b3ecd227 26 void update_mm(void const *args);
jfields 0:c204b3ecd227 27 void update_ss(void const *args);
jfields 0:c204b3ecd227 28 void update_MM(void const *args);
jfields 0:c204b3ecd227 29
jfields 0:c204b3ecd227 30 int main() {
jfields 0:c204b3ecd227 31
jfields 0:c204b3ecd227 32 Thread thread_display(update_display);
xueliz 3:6fad2a5b72e5 33 Thread thread_mm(update_mm);
xueliz 3:6fad2a5b72e5 34 Thread thread_ss(update_ss);
xueliz 3:6fad2a5b72e5 35 Thread thread_MM(update_MM);
xueliz 2:91cb258f9745 36 char input = 'z';
xueliz 3:6fad2a5b72e5 37
xueliz 2:91cb258f9745 38 while(1) {
xueliz 2:91cb258f9745 39 if ( input == 's') {
xueliz 3:6fad2a5b72e5 40 if (run_status==STOP) {
xueliz 4:f6eee8bb51c2 41 run_status = RUN;
xueliz 3:6fad2a5b72e5 42 thread_mm.signal_set(RUN);
xueliz 3:6fad2a5b72e5 43 thread_ss.signal_set(RUN);
xueliz 3:6fad2a5b72e5 44 thread_MM.signal_set(RUN);
xueliz 3:6fad2a5b72e5 45 thread_display.signal_set(RUN);
xueliz 4:f6eee8bb51c2 46
xueliz 2:91cb258f9745 47 }
xueliz 2:91cb258f9745 48 }
xueliz 2:91cb258f9745 49 if ( input == 'p') {
xueliz 3:6fad2a5b72e5 50 if (run_status==RUN) {
xueliz 3:6fad2a5b72e5 51 run_status = STOP;
xueliz 2:91cb258f9745 52 }
xueliz 2:91cb258f9745 53 }
xueliz 2:91cb258f9745 54 if ( input == 'r') {
xueliz 4:f6eee8bb51c2 55 if (run_status == STOP) {
xueliz 2:91cb258f9745 56 mm[0] = mm[1] = 0;
xueliz 2:91cb258f9745 57 ss[0] = ss[1] = 0;
xueliz 2:91cb258f9745 58 MM[0] = MM[1] = 0;
xueliz 5:f5f4b730a6fb 59 mm_stop[0] = mm_stop[1] = 0;
xueliz 5:f5f4b730a6fb 60 ss_stop[0] = ss_stop[1] = 0;
xueliz 5:f5f4b730a6fb 61 MM_stop[0] = MM_stop[1] = 0;
xueliz 3:6fad2a5b72e5 62 thread_display.signal_set(RUN);
xueliz 2:91cb258f9745 63 }
xueliz 2:91cb258f9745 64 }
xueliz 2:91cb258f9745 65
xueliz 2:91cb258f9745 66 input = pc.getc();
jfields 0:c204b3ecd227 67 }
xueliz 2:91cb258f9745 68
jfields 0:c204b3ecd227 69 }
jfields 0:c204b3ecd227 70
jfields 0:c204b3ecd227 71 void update_display(void const *args) {
jfields 0:c204b3ecd227 72 while (1) {
jfields 0:c204b3ecd227 73 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 74 Thread::signal_wait(RUN);
xueliz 3:6fad2a5b72e5 75 while (run_status) {
xueliz 3:6fad2a5b72e5 76 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 77 Thread::wait(10);
xueliz 3:6fad2a5b72e5 78 }
jfields 0:c204b3ecd227 79 }
jfields 0:c204b3ecd227 80 }
jfields 0:c204b3ecd227 81
jfields 0:c204b3ecd227 82 void update_mm(void const *args) {
xueliz 3:6fad2a5b72e5 83 while(1){
xueliz 3:6fad2a5b72e5 84 Thread::signal_wait(RUN);
xueliz 5:f5f4b730a6fb 85 Thread::wait(10-mm_stop[0]);
xueliz 4:f6eee8bb51c2 86 mm[0]++;
xueliz 4:f6eee8bb51c2 87 if (mm[0] >= 10) {
xueliz 4:f6eee8bb51c2 88 mm[0] = 0;
xueliz 4:f6eee8bb51c2 89 mm[1]++;
xueliz 4:f6eee8bb51c2 90 }
xueliz 4:f6eee8bb51c2 91 if (mm[1] >= 10) {
xueliz 4:f6eee8bb51c2 92 mm[0] = 0;
xueliz 4:f6eee8bb51c2 93 mm[1] = 0;
xueliz 4:f6eee8bb51c2 94 }
xueliz 3:6fad2a5b72e5 95 while (run_status) {
xueliz 3:6fad2a5b72e5 96 Thread::wait(10);
xueliz 3:6fad2a5b72e5 97 mm[0]++;
xueliz 3:6fad2a5b72e5 98 if (mm[0] >= 10) {
xueliz 3:6fad2a5b72e5 99 mm[0] = 0;
xueliz 3:6fad2a5b72e5 100 mm[1]++;
xueliz 3:6fad2a5b72e5 101 }
xueliz 3:6fad2a5b72e5 102 if (mm[1] >= 10) {
xueliz 3:6fad2a5b72e5 103 mm[0] = 0;
xueliz 3:6fad2a5b72e5 104 mm[1] = 0;
xueliz 3:6fad2a5b72e5 105 }
jfields 1:38e744366b97 106 }
xueliz 5:f5f4b730a6fb 107 mm_stop[1] = mm[1];
xueliz 5:f5f4b730a6fb 108 mm_stop[0] = mm[0];
jfields 0:c204b3ecd227 109 }
jfields 0:c204b3ecd227 110 }
jfields 1:38e744366b97 111
jfields 0:c204b3ecd227 112 void update_ss(void const *args) {
xueliz 3:6fad2a5b72e5 113 while(1) {
xueliz 3:6fad2a5b72e5 114 Thread::signal_wait(RUN);
xueliz 5:f5f4b730a6fb 115 Thread::wait(1000-100*mm_stop[1]-10*mm_stop[0]);
xueliz 4:f6eee8bb51c2 116 ss[0]++;
xueliz 4:f6eee8bb51c2 117 if (ss[0] >= 10) {
xueliz 4:f6eee8bb51c2 118 ss[0] = 0;
xueliz 4:f6eee8bb51c2 119 ss[1]++;
xueliz 4:f6eee8bb51c2 120 }
xueliz 4:f6eee8bb51c2 121 if (ss[1] >= 6) {
xueliz 4:f6eee8bb51c2 122 ss[0] = 0;
xueliz 4:f6eee8bb51c2 123 ss[1] = 0;
xueliz 4:f6eee8bb51c2 124 }
xueliz 3:6fad2a5b72e5 125 while (run_status) {
xueliz 3:6fad2a5b72e5 126 Thread::wait(1000);
xueliz 3:6fad2a5b72e5 127 ss[0]++;
xueliz 3:6fad2a5b72e5 128 if (ss[0] >= 10) {
xueliz 3:6fad2a5b72e5 129 ss[0] = 0;
xueliz 3:6fad2a5b72e5 130 ss[1]++;
xueliz 3:6fad2a5b72e5 131 }
xueliz 3:6fad2a5b72e5 132 if (ss[1] >= 6) {
xueliz 3:6fad2a5b72e5 133 ss[0] = 0;
xueliz 3:6fad2a5b72e5 134 ss[1] = 0;
xueliz 3:6fad2a5b72e5 135 }
jfields 1:38e744366b97 136 }
xueliz 5:f5f4b730a6fb 137 ss_stop[1] = ss[1];
xueliz 5:f5f4b730a6fb 138 ss_stop[0] = ss[0];
jfields 0:c204b3ecd227 139 }
jfields 0:c204b3ecd227 140 }
jfields 0:c204b3ecd227 141
jfields 0:c204b3ecd227 142 void update_MM(void const *args) {
xueliz 3:6fad2a5b72e5 143 while(1) {
xueliz 3:6fad2a5b72e5 144 Thread::signal_wait(RUN);
xueliz 5:f5f4b730a6fb 145 Thread::wait(60000-10000*ss_stop[1]-1000*ss_stop[0]-100*mm_stop[1]-10*mm_stop[0]);
xueliz 4:f6eee8bb51c2 146 MM[0]++;
xueliz 4:f6eee8bb51c2 147 if (MM[0] >= 10) {
xueliz 4:f6eee8bb51c2 148 MM[0] = 0;
xueliz 4:f6eee8bb51c2 149 MM[1]++;
xueliz 4:f6eee8bb51c2 150 }
xueliz 4:f6eee8bb51c2 151 if (MM[1] >= 6) {
xueliz 4:f6eee8bb51c2 152 MM[0] = 0;
xueliz 4:f6eee8bb51c2 153 MM[1] = 0;
xueliz 4:f6eee8bb51c2 154 }
xueliz 3:6fad2a5b72e5 155 while (run_status) {
xueliz 3:6fad2a5b72e5 156 Thread::wait(60000);
xueliz 3:6fad2a5b72e5 157 MM[0]++;
xueliz 3:6fad2a5b72e5 158 if (MM[0] >= 10) {
xueliz 3:6fad2a5b72e5 159 MM[0] = 0;
xueliz 3:6fad2a5b72e5 160 MM[1]++;
xueliz 3:6fad2a5b72e5 161 }
xueliz 3:6fad2a5b72e5 162 if (MM[1] >= 6) {
xueliz 3:6fad2a5b72e5 163 MM[0] = 0;
xueliz 3:6fad2a5b72e5 164 MM[1] = 0;
xueliz 3:6fad2a5b72e5 165 }
jfields 1:38e744366b97 166 }
xueliz 5:f5f4b730a6fb 167 MM_stop[1] = MM[1];
xueliz 5:f5f4b730a6fb 168 MM_stop[0] = MM[0];
jfields 0:c204b3ecd227 169 }
jfields 0:c204b3ecd227 170 }