wave cancel

Dependencies:   4DGL-uLCD-SE EthernetInterface HTTPClient NTPClient PinDetect SDFileSystem mbed-rtos mbed wave_player

Fork of 4180_Final_Project by Adam Zuravleff

Committer:
agamemaker
Date:
Fri Apr 29 05:52:41 2016 +0000
Revision:
14:37293ee3f3c1
Parent:
13:34dc6730e791
done;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ashea6 2:4d370e3f4618 1 //WavePlayer_HelloWorld4180
ashea6 2:4d370e3f4618 2 //internet_clock
4180_1 1:5b8e223e983d 3
4180_1 1:5b8e223e983d 4 #include "mbed.h"
4180_1 1:5b8e223e983d 5 #include "SDFileSystem.h"
4180_1 1:5b8e223e983d 6 #include "wave_player.h"
ashea6 2:4d370e3f4618 7 #include "EthernetInterface.h"
ashea6 2:4d370e3f4618 8 #include "NTPClient.h"
ashea6 2:4d370e3f4618 9 #include "uLCD_4DGL.h"
ashea6 2:4d370e3f4618 10 #include "rtos.h"
ashea6 3:5f0b28699a67 11 #include "PinDetect.h"
agamemaker 8:4750e5fd45c1 12 #include "HTTPClient.h"
4180_1 1:5b8e223e983d 13
ashea6 5:3c880df67e2e 14 //pinouts
agamemaker 8:4750e5fd45c1 15 // Graphic LCD - TX, RX, and RES pins
agamemaker 8:4750e5fd45c1 16 uLCD_4DGL uLCD(p28,p27,p29);
ashea6 2:4d370e3f4618 17 SDFileSystem sd(p11, p12, p13, p14, "sd"); //SD card
agamemaker 11:89e778e985d5 18 Serial pc(USBTX, USBRX);
agamemaker 11:89e778e985d5 19 Serial time_weth(p9, p10);
4180_1 1:5b8e223e983d 20 AnalogOut DACout(p18);
4180_1 1:5b8e223e983d 21 wave_player waver(&DACout);
ashea6 3:5f0b28699a67 22 PinDetect snooze(p19); //snooze button
ashea6 3:5f0b28699a67 23 PinDetect off(p20); //turn alarm off
agamemaker 11:89e778e985d5 24 PinDetect settings(p17); //turn alarm off
ashea6 3:5f0b28699a67 25 DigitalOut myled1(LED1);
ashea6 3:5f0b28699a67 26 DigitalOut myled2(LED2);
ashea6 5:3c880df67e2e 27 DigitalOut myled3(LED3);
agamemaker 8:4750e5fd45c1 28 //Mutex lcd_mutex;
4180_1 1:5b8e223e983d 29
ashea6 2:4d370e3f4618 30 // Parameters
agamemaker 8:4750e5fd45c1 31 char* time_domain_name = "0.uk.pool.ntp.org";
agamemaker 9:fbb5f22fc299 32 //char* weth_domain_name = "http://weather.yahooapis.com/forecastrss?w=2502265";
agamemaker 10:6b27fafad047 33 //char* weth_domain_name = "http://developer.mbed.org/media/uploads/mbed_official/hello.txt";
agamemaker 11:89e778e985d5 34 //char* weth_domain_name = "https://query.yahooapis.com/v1/public/yql?q=select%20item.condition%20from%20weather.forecast%20where%20woeid%20in%20%28select%20woeid%20from%20geo.places%281%29%20where%20text%3D%22atlanta%2C%20ga%22%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
ashea6 2:4d370e3f4618 35 int port_number = 123;
ashea6 2:4d370e3f4618 36
ashea6 2:4d370e3f4618 37 // Networking
ashea6 2:4d370e3f4618 38 EthernetInterface eth;
agamemaker 14:37293ee3f3c1 39 #define snoozeTime 420
agamemaker 11:89e778e985d5 40 #define locationLength 50
ashea6 5:3c880df67e2e 41
ashea6 2:4d370e3f4618 42 //global variables
ashea6 2:4d370e3f4618 43 time_t ct_time;
ashea6 5:3c880df67e2e 44 // Base alarm time-24 hour clock
ashea6 5:3c880df67e2e 45 int baseAlarmHour = 0; //0-23
ashea6 5:3c880df67e2e 46 int baseAlarmMin = 0;
ashea6 5:3c880df67e2e 47 // Current alarm time
ashea6 5:3c880df67e2e 48 int curAlarmHour = 18; //0-23
ashea6 5:3c880df67e2e 49 int curAlarmMin = 9;
ashea6 6:8e926bbfaec0 50 bool play = true;
agamemaker 11:89e778e985d5 51 //traffic
agamemaker 14:37293ee3f3c1 52 char start_add[locationLength]; // start location address
agamemaker 14:37293ee3f3c1 53 char dest_add[locationLength]; // destination address
agamemaker 14:37293ee3f3c1 54 int trip_sec = 47400;
agamemaker 13:34dc6730e791 55 int arrival_hour;
agamemaker 13:34dc6730e791 56 int arrival_min;
agamemaker 13:34dc6730e791 57 int ready_time = 0;
agamemaker 11:89e778e985d5 58
ashea6 2:4d370e3f4618 59
ashea6 3:5f0b28699a67 60 //time thread
ashea6 2:4d370e3f4618 61 void time_thread(void const *args)
ashea6 2:4d370e3f4618 62 {
ashea6 2:4d370e3f4618 63 char time_buffer[80];
ashea6 5:3c880df67e2e 64 // Loop and update clock
ashea6 2:4d370e3f4618 65 while (1) {
agamemaker 8:4750e5fd45c1 66 //lcd_mutex.lock();
ashea6 2:4d370e3f4618 67 uLCD.locate(0, 1);
ashea6 2:4d370e3f4618 68 ct_time = time(NULL);
ashea6 2:4d370e3f4618 69 strftime(time_buffer, 80, " %a %b %d\n %T %p %z\n %Z\n", \
ashea6 2:4d370e3f4618 70 localtime(&ct_time));
ashea6 2:4d370e3f4618 71 uLCD.printf(" UTC/GMT:\n%s", time_buffer);
agamemaker 8:4750e5fd45c1 72 //lcd_mutex.unlock();
ashea6 2:4d370e3f4618 73 Thread::wait(100);
ashea6 2:4d370e3f4618 74 }
ashea6 2:4d370e3f4618 75 }
agamemaker 13:34dc6730e791 76
agamemaker 13:34dc6730e791 77 void reset_alarm()
agamemaker 13:34dc6730e791 78 {
agamemaker 14:37293ee3f3c1 79 int trip_hour = trip_sec/(60*60);
agamemaker 14:37293ee3f3c1 80 int trip_min = (trip_sec - trip_hour*(60*60))/60;
agamemaker 14:37293ee3f3c1 81 uLCD.printf("trip %d:%d\n", trip_hour, trip_min);
agamemaker 14:37293ee3f3c1 82 baseAlarmHour = arrival_hour - trip_hour;
agamemaker 14:37293ee3f3c1 83 baseAlarmMin = arrival_min - trip_min - ready_time;
agamemaker 14:37293ee3f3c1 84 while(baseAlarmMin<0) {
agamemaker 14:37293ee3f3c1 85 baseAlarmHour -= 1;
agamemaker 14:37293ee3f3c1 86 baseAlarmMin += 60;
agamemaker 13:34dc6730e791 87 }
agamemaker 14:37293ee3f3c1 88 if(baseAlarmHour<0) {
agamemaker 14:37293ee3f3c1 89 baseAlarmHour +=24;
agamemaker 14:37293ee3f3c1 90 }
agamemaker 14:37293ee3f3c1 91 curAlarmHour = baseAlarmHour;
agamemaker 13:34dc6730e791 92 curAlarmMin = baseAlarmMin;
agamemaker 13:34dc6730e791 93 }
agamemaker 13:34dc6730e791 94
agamemaker 14:37293ee3f3c1 95 void comm_get()
agamemaker 14:37293ee3f3c1 96 {
agamemaker 14:37293ee3f3c1 97 int sum = 0;
agamemaker 14:37293ee3f3c1 98 bool flag = false;
agamemaker 14:37293ee3f3c1 99 char url[512];
agamemaker 14:37293ee3f3c1 100 char buff[4];
agamemaker 14:37293ee3f3c1 101 int i = 0;
agamemaker 14:37293ee3f3c1 102 sprintf(url, "https://www.mapquestapi.com/directions/v2/route?key=ZoiBJSzSoqfdNiLD0Z9kZdw4uAN5QUQW&from=%s&to=%s", start_add, dest_add);
agamemaker 14:37293ee3f3c1 103 uLCD.printf("%s^\n",url);
agamemaker 14:37293ee3f3c1 104 time_weth.printf("%s^",url);
agamemaker 14:37293ee3f3c1 105 uLCD.printf("Reading travel time");
agamemaker 14:37293ee3f3c1 106 while(!flag) {
agamemaker 14:37293ee3f3c1 107 buff[i] = time_weth.getc();
agamemaker 14:37293ee3f3c1 108 //pc.putc(buff[i]);
agamemaker 14:37293ee3f3c1 109 flag = buff[i] == '^';
agamemaker 14:37293ee3f3c1 110 i++;
agamemaker 14:37293ee3f3c1 111 }
agamemaker 14:37293ee3f3c1 112 for(i = 0; i < 4; i++) {
agamemaker 14:37293ee3f3c1 113 sum += int(buff[3-i]-'0') * pow(10.0,i);
agamemaker 14:37293ee3f3c1 114 }
agamemaker 14:37293ee3f3c1 115 trip_sec = sum;
agamemaker 14:37293ee3f3c1 116 uLCD.printf("travel secs %d\n", trip_sec);
agamemaker 14:37293ee3f3c1 117 wait(10);
agamemaker 14:37293ee3f3c1 118 }
agamemaker 14:37293ee3f3c1 119 /*
agamemaker 11:89e778e985d5 120 //communication thread
agamemaker 11:89e778e985d5 121 void comm_thread(void const *args)
agamemaker 8:4750e5fd45c1 122 {
agamemaker 13:34dc6730e791 123 char buff[4];
agamemaker 13:34dc6730e791 124 int i;
agamemaker 13:34dc6730e791 125 int sum = 0;
agamemaker 13:34dc6730e791 126 bool flag;
agamemaker 13:34dc6730e791 127 while(true) {
agamemaker 13:34dc6730e791 128 for(i = 0; i < locationLength; i++) {
agamemaker 13:34dc6730e791 129 time_weth.putc(start_add[i]);
agamemaker 13:34dc6730e791 130 }
agamemaker 14:37293ee3f3c1 131 time_weth.putc('@');
agamemaker 13:34dc6730e791 132 for(i = 0; i < locationLength; i++) {
agamemaker 13:34dc6730e791 133 time_weth.putc(dest_add[i]);
agamemaker 13:34dc6730e791 134 }
agamemaker 13:34dc6730e791 135 flag = false;
agamemaker 13:34dc6730e791 136 i = 0;
agamemaker 14:37293ee3f3c1 137 uLCD.printf("send fomplete");
agamemaker 13:34dc6730e791 138 while(!flag) {
agamemaker 13:34dc6730e791 139 buff[i] = pc.getc();
agamemaker 13:34dc6730e791 140 //pc.putc(buff[i]);
agamemaker 13:34dc6730e791 141 flag = buff[i] == '^';
agamemaker 13:34dc6730e791 142 i++;
agamemaker 13:34dc6730e791 143 }
agamemaker 13:34dc6730e791 144 for(i = 0; i < 4; i++) {
agamemaker 13:34dc6730e791 145 sum += int(buff[i]-'0') * pow(10.0,i);
agamemaker 13:34dc6730e791 146 }
agamemaker 13:34dc6730e791 147 trip_sec = sum;
agamemaker 13:34dc6730e791 148 reset_alarm();
agamemaker 13:34dc6730e791 149 Thread::wait(1800000);
agamemaker 13:34dc6730e791 150 }
agamemaker 8:4750e5fd45c1 151 }
agamemaker 14:37293ee3f3c1 152 */
ashea6 3:5f0b28699a67 153 //pushbutton (p19)
ashea6 3:5f0b28699a67 154 void snooze_hit_callback (void)
ashea6 3:5f0b28699a67 155 {
ashea6 5:3c880df67e2e 156 myled1 = !myled1;
ashea6 6:8e926bbfaec0 157 play = false;
ashea6 5:3c880df67e2e 158 time_t newtime;
ashea6 5:3c880df67e2e 159 struct tm * timeinfo;
ashea6 5:3c880df67e2e 160 newtime = ct_time + snoozeTime;
ashea6 5:3c880df67e2e 161 //time (&newtime);
ashea6 5:3c880df67e2e 162 timeinfo = localtime (&newtime);
ashea6 5:3c880df67e2e 163 curAlarmMin = timeinfo->tm_min;
ashea6 5:3c880df67e2e 164 curAlarmHour = timeinfo->tm_hour;
ashea6 3:5f0b28699a67 165 }
ashea6 3:5f0b28699a67 166
ashea6 3:5f0b28699a67 167 void off_hit_callback (void)
ashea6 3:5f0b28699a67 168 {
ashea6 3:5f0b28699a67 169 myled2 = !myled2;
ashea6 6:8e926bbfaec0 170 play = false;
ashea6 6:8e926bbfaec0 171 curAlarmMin = baseAlarmMin;
ashea6 6:8e926bbfaec0 172 curAlarmHour = baseAlarmHour;
ashea6 3:5f0b28699a67 173 }
ashea6 3:5f0b28699a67 174
agamemaker 11:89e778e985d5 175 void settings_hit_callback (void)
agamemaker 11:89e778e985d5 176 {
agamemaker 11:89e778e985d5 177 while(1) {
agamemaker 11:89e778e985d5 178 char buff[100];
agamemaker 11:89e778e985d5 179 int i = 0;
agamemaker 11:89e778e985d5 180 bool flag = false;
agamemaker 11:89e778e985d5 181 while(!flag) {
agamemaker 11:89e778e985d5 182 buff[i] = pc.getc();
agamemaker 11:89e778e985d5 183 pc.putc(buff[i]);
agamemaker 11:89e778e985d5 184 flag = buff[i] == '^';
agamemaker 11:89e778e985d5 185 i++;
agamemaker 11:89e778e985d5 186 }
agamemaker 11:89e778e985d5 187 uLCD.printf("%s", buff);
agamemaker 11:89e778e985d5 188
agamemaker 11:89e778e985d5 189 mkdir("/sd/mydir", 0777);
agamemaker 11:89e778e985d5 190 FILE *fp = fopen("/sd/mydir/sdtest.txt", "w");
agamemaker 11:89e778e985d5 191 if(fp == NULL) {
agamemaker 11:89e778e985d5 192 error("Could not open file for write\n");
agamemaker 11:89e778e985d5 193 }
agamemaker 11:89e778e985d5 194 fprintf(fp, buff);
agamemaker 11:89e778e985d5 195 fclose(fp);
agamemaker 11:89e778e985d5 196 }
agamemaker 11:89e778e985d5 197 }
agamemaker 11:89e778e985d5 198
ashea6 4:55035e20ae61 199 void play_file()
ashea6 4:55035e20ae61 200 {
ashea6 6:8e926bbfaec0 201 bool* play_point = &play;
ashea6 4:55035e20ae61 202 FILE *wave_file;
ashea6 4:55035e20ae61 203 printf("\n\n\nHello, wave world!\n");
ashea6 4:55035e20ae61 204 wave_file=fopen("/sd/bob.wav","r");
ashea6 6:8e926bbfaec0 205 waver.play(wave_file, play_point);
ashea6 4:55035e20ae61 206 fclose(wave_file);
ashea6 4:55035e20ae61 207 }
ashea6 5:3c880df67e2e 208
ashea6 5:3c880df67e2e 209 void timeCompare()
ashea6 5:3c880df67e2e 210 {
ashea6 5:3c880df67e2e 211 struct tm * timeinfo;
ashea6 5:3c880df67e2e 212 timeinfo = localtime (&ct_time);
ashea6 5:3c880df67e2e 213 if (timeinfo->tm_min == curAlarmMin && timeinfo->tm_hour == curAlarmHour) {
ashea6 6:8e926bbfaec0 214 play = true;
ashea6 6:8e926bbfaec0 215 myled3 = true;
ashea6 5:3c880df67e2e 216 play_file();
ashea6 5:3c880df67e2e 217 }
ashea6 5:3c880df67e2e 218 }
ashea6 5:3c880df67e2e 219
deronmai 12:27470e8c0556 220 void getSDInfo()
deronmai 12:27470e8c0556 221 {
agamemaker 13:34dc6730e791 222 char c;
deronmai 12:27470e8c0556 223 FILE *fp = fopen("/sd/mydir/sdtest.txt", "r");
deronmai 12:27470e8c0556 224 if(fp == NULL) {
deronmai 12:27470e8c0556 225 error("Could not open file for read\n");
deronmai 12:27470e8c0556 226 }
deronmai 12:27470e8c0556 227 int count = 0;
deronmai 12:27470e8c0556 228 int i;
deronmai 12:27470e8c0556 229 char arr_time[8] = "";
deronmai 12:27470e8c0556 230 char hour[3], min[3];
deronmai 12:27470e8c0556 231 char r_time[8] = "";
agamemaker 13:34dc6730e791 232
agamemaker 13:34dc6730e791 233
agamemaker 13:34dc6730e791 234 while (!feof(fp)) { // while not end of file
deronmai 12:27470e8c0556 235 c=fgetc(fp); // get a character/byte from the file
deronmai 12:27470e8c0556 236 uLCD.printf("%c",c);
agamemaker 13:34dc6730e791 237 if (c == '@') {
deronmai 12:27470e8c0556 238 count++; // specifies what data (eg. arrival time, ready time, etc)
deronmai 12:27470e8c0556 239 i = 0;
agamemaker 13:34dc6730e791 240 } else {
agamemaker 13:34dc6730e791 241 //uLCD.printf("%d",count);
agamemaker 13:34dc6730e791 242 switch (count) {
agamemaker 13:34dc6730e791 243 case 0: // arrival time
agamemaker 13:34dc6730e791 244 arr_time[i] = c;
agamemaker 13:34dc6730e791 245 i++;
agamemaker 13:34dc6730e791 246 break;
agamemaker 13:34dc6730e791 247 case 1: // ready time (min)
agamemaker 13:34dc6730e791 248 r_time[i] = c;
agamemaker 13:34dc6730e791 249 i++;
agamemaker 13:34dc6730e791 250 break;
agamemaker 13:34dc6730e791 251 case 2: // start address
agamemaker 13:34dc6730e791 252 start_add[i] = c;
agamemaker 13:34dc6730e791 253 i++;
agamemaker 13:34dc6730e791 254 break;
agamemaker 13:34dc6730e791 255 case 3: // destination address
agamemaker 13:34dc6730e791 256 dest_add[i] = c;
agamemaker 13:34dc6730e791 257 i++;
agamemaker 13:34dc6730e791 258 break;
agamemaker 13:34dc6730e791 259 default:
agamemaker 13:34dc6730e791 260 error("too many & detected\n");
agamemaker 13:34dc6730e791 261 break;
agamemaker 13:34dc6730e791 262 }
agamemaker 13:34dc6730e791 263
agamemaker 13:34dc6730e791 264 //uLCD.printf("Read from file %02x\n\r",c); // and show it in hex format
deronmai 12:27470e8c0556 265 }
deronmai 12:27470e8c0556 266 }
deronmai 12:27470e8c0556 267 memcpy( hour, &arr_time[0], 2 );
deronmai 12:27470e8c0556 268 memcpy( min, &arr_time[3], 2 );
deronmai 12:27470e8c0556 269
deronmai 12:27470e8c0556 270 arrival_hour = atoi(hour);
deronmai 12:27470e8c0556 271 arrival_min = atoi(min);
deronmai 12:27470e8c0556 272 uLCD.printf("\narrival hour is %d\n",arrival_hour);
deronmai 12:27470e8c0556 273 uLCD.printf("arrival min is %d\n",arrival_min);
deronmai 12:27470e8c0556 274
deronmai 12:27470e8c0556 275 ready_time = atoi(r_time);
deronmai 12:27470e8c0556 276 //uLCD.printf("\nString ready time is %s",r_time);
deronmai 12:27470e8c0556 277 uLCD.printf("Ready Time is %d\n",ready_time);
deronmai 12:27470e8c0556 278 uLCD.printf("start address is %s\n", start_add);
deronmai 12:27470e8c0556 279 uLCD.printf("dest address is %s\n", dest_add);
agamemaker 13:34dc6730e791 280 fclose(fp);
deronmai 12:27470e8c0556 281 }
deronmai 12:27470e8c0556 282
4180_1 1:5b8e223e983d 283 int main()
4180_1 1:5b8e223e983d 284 {
agamemaker 14:37293ee3f3c1 285 getSDInfo();
agamemaker 14:37293ee3f3c1 286 uLCD.cls();
agamemaker 14:37293ee3f3c1 287 comm_get();
agamemaker 14:37293ee3f3c1 288 uLCD.cls();
agamemaker 14:37293ee3f3c1 289 reset_alarm();
agamemaker 14:37293ee3f3c1 290 uLCD.printf("base = %d:%d\ncurr = %d:%d", baseAlarmHour, baseAlarmMin, curAlarmHour, curAlarmMin);
agamemaker 14:37293ee3f3c1 291 wait(10);
agamemaker 14:37293ee3f3c1 292 //Thread t2(comm_thread);
ashea6 3:5f0b28699a67 293 snooze.mode(PullUp);
ashea6 3:5f0b28699a67 294 off.mode(PullUp);
agamemaker 11:89e778e985d5 295 settings.mode(PullUp);
ashea6 3:5f0b28699a67 296 wait(0.01);
ashea6 3:5f0b28699a67 297 snooze.attach_deasserted(&snooze_hit_callback);
ashea6 3:5f0b28699a67 298 off.attach_deasserted(&off_hit_callback);
agamemaker 11:89e778e985d5 299 settings.attach_deasserted(&off_hit_callback);
ashea6 3:5f0b28699a67 300 snooze.setSampleFrequency();
ashea6 3:5f0b28699a67 301 off.setSampleFrequency();
agamemaker 11:89e778e985d5 302 settings.setSampleFrequency();
ashea6 2:4d370e3f4618 303
agamemaker 7:456add5c89e1 304 //play_file();
ashea6 2:4d370e3f4618 305
ashea6 2:4d370e3f4618 306
ashea6 2:4d370e3f4618 307 // Initialize LCD
ashea6 2:4d370e3f4618 308 uLCD.baudrate(115200);
ashea6 2:4d370e3f4618 309 uLCD.background_color(BLACK);
ashea6 2:4d370e3f4618 310 uLCD.cls();
ashea6 2:4d370e3f4618 311
ashea6 2:4d370e3f4618 312 // Connect to network and wait for DHCP
ashea6 2:4d370e3f4618 313 uLCD.locate(0,0);
ashea6 2:4d370e3f4618 314 uLCD.printf("Getting IP Address\n");
ashea6 2:4d370e3f4618 315 eth.init();
ashea6 2:4d370e3f4618 316 if ( eth.connect(60000) == -1 ) {
ashea6 2:4d370e3f4618 317 uLCD.printf("ERROR: Could not\nget IP address");
ashea6 2:4d370e3f4618 318 return -1;
ashea6 2:4d370e3f4618 319 }
ashea6 2:4d370e3f4618 320 uLCD.printf("IP address is \n%s\n\n",eth.getIPAddress());
ashea6 2:4d370e3f4618 321 // Read time from server
agamemaker 10:6b27fafad047 322 {
agamemaker 10:6b27fafad047 323 uLCD.printf("Reading time...\n\r");
agamemaker 10:6b27fafad047 324 NTPClient ntp_client;
agamemaker 10:6b27fafad047 325 ntp_client.setTime(time_domain_name, port_number);
agamemaker 10:6b27fafad047 326 uLCD.printf("Time set\n");
agamemaker 10:6b27fafad047 327 }
ashea6 2:4d370e3f4618 328 Thread::wait(2000);
ashea6 2:4d370e3f4618 329 eth.disconnect();
ashea6 2:4d370e3f4618 330
ashea6 2:4d370e3f4618 331 // Reset LCD
ashea6 2:4d370e3f4618 332 uLCD.background_color(WHITE);
ashea6 2:4d370e3f4618 333 uLCD.textbackground_color(WHITE);
ashea6 2:4d370e3f4618 334 uLCD.color(RED);
ashea6 2:4d370e3f4618 335 uLCD.cls();
ashea6 2:4d370e3f4618 336 uLCD.text_height(2);
ashea6 2:4d370e3f4618 337
agamemaker 11:89e778e985d5 338 Thread t1(time_thread);
agamemaker 7:456add5c89e1 339 while(true) {
ashea6 5:3c880df67e2e 340 timeCompare();
ashea6 5:3c880df67e2e 341 Thread::wait(100);
ashea6 5:3c880df67e2e 342 }
ashea6 4:55035e20ae61 343
4180_1 1:5b8e223e983d 344 }