wave cancel

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

Fork of 4180_Final_Project by Adam Zuravleff

Revision:
13:34dc6730e791
Parent:
12:27470e8c0556
Child:
14:37293ee3f3c1
--- a/main.cpp	Thu Apr 28 17:00:55 2016 +0000
+++ b/main.cpp	Thu Apr 28 23:45:23 2016 +0000
@@ -49,8 +49,12 @@
 int curAlarmMin = 9;
 bool play = true;
 //traffic
-char location[locationLength];
-char destination[locationLength];
+char start_add[locationLength] = ""; // start location address
+char dest_add[locationLength] = ""; // destination address
+int trip_sec = 0;
+int arrival_hour;
+int arrival_min;
+int ready_time = 0;
 
 
 //time thread
@@ -69,20 +73,52 @@
         Thread::wait(100);
     }
 }
-/*
+
+void reset_alarm()
+{
+    int arival_sec = arrival_min*60 + arrival_hour*60*24;
+    int alarm = arival_sec - trip_sec - ready_time*60;
+    if(alarm < 0) {
+        alarm += 86400;
+    }
+    alarm = (alarm - (alarm % 60))/60;
+    baseAlarmMin = (alarm % 60);
+    alarm = (alarm - (alarm % 60))/60;
+    baseAlarmHour = (alarm % 60);
+    curAlarmMin = baseAlarmMin;
+    curAlarmHour = baseAlarmHour;
+}
+
 //communication thread
 void comm_thread(void const *args)
 {
-    time_weth.putc("w");
-    time_weth.putc("e");
-    time_weth.putc("t");
-    time_weth.putc("h");
-    for(i = 0; i < locationLength; i++){
-        time_weth.putc(location[i]);
-        time_weth.putc(destination[i]);
-    }  
+    char buff[4];
+    int i;
+    int sum = 0;
+    bool flag;
+    while(true) {
+        for(i = 0; i < locationLength; i++) {
+            time_weth.putc(start_add[i]);
+        }
+        for(i = 0; i < locationLength; i++) {
+            time_weth.putc(dest_add[i]);
+        }
+        flag = false;
+        i = 0;
+        while(!flag) {
+            buff[i] = pc.getc();
+            //pc.putc(buff[i]);
+            flag = buff[i] == '^';
+            i++;
+        }
+        for(i = 0; i < 4; i++) {
+            sum += int(buff[i]-'0') * pow(10.0,i);
+        }
+        trip_sec = sum;
+        reset_alarm();
+        Thread::wait(1800000);
+    }
 }
-*/
 
 //pushbutton (p19)
 void snooze_hit_callback (void)
@@ -153,7 +189,7 @@
 
 void getSDInfo()
 {
-    char c;    
+    char c;
     FILE *fp = fopen("/sd/mydir/sdtest.txt", "r");
     if(fp == NULL) {
         error("Could not open file for read\n");
@@ -162,45 +198,40 @@
     int i;
     char arr_time[8] = "";
     char hour[3], min[3];
-    int arrival_hour;
-    int arrival_min;
     char r_time[8] = "";
-    int ready_time = 0;
-    char start_add[32] = ""; // start location address
-    char dest_add[32] = ""; // destination address
-    
-    while (!feof(fp)){                        // while not end of file
+
+
+    while (!feof(fp)) {                       // while not end of file
         c=fgetc(fp);                         // get a character/byte from the file
         uLCD.printf("%c",c);
-        if (c == '@') { 
+        if (c == '@') {
             count++; // specifies what data (eg. arrival time, ready time, etc)
             i = 0;
-        }
-        else {
-        //uLCD.printf("%d",count);
-        switch (count) {
-            case 0: // arrival time
-                arr_time[i] = c;
-                i++;
-                break;
-            case 1: // ready time (min)
-                r_time[i] = c;
-                i++;
-                break;
-            case 2: // start address
-                start_add[i] = c;
-                i++;
-                break;
-            case 3: // destination address
-                dest_add[i] = c;
-                i++;
-                break;
-            default:
-                error("too many & detected\n");
-                break;
-        }
-        
-        //uLCD.printf("Read from file %02x\n\r",c); // and show it in hex format
+        } else {
+            //uLCD.printf("%d",count);
+            switch (count) {
+                case 0: // arrival time
+                    arr_time[i] = c;
+                    i++;
+                    break;
+                case 1: // ready time (min)
+                    r_time[i] = c;
+                    i++;
+                    break;
+                case 2: // start address
+                    start_add[i] = c;
+                    i++;
+                    break;
+                case 3: // destination address
+                    dest_add[i] = c;
+                    i++;
+                    break;
+                default:
+                    error("too many & detected\n");
+                    break;
+            }
+
+            //uLCD.printf("Read from file %02x\n\r",c); // and show it in hex format
         }
     }
     memcpy( hour, &arr_time[0], 2 );
@@ -216,8 +247,8 @@
     uLCD.printf("Ready Time is %d\n",ready_time);
     uLCD.printf("start address is %s\n", start_add);
     uLCD.printf("dest address is %s\n", dest_add);
-   
-    fclose(fp); 
+
+    fclose(fp);
 }
 
 int main()