attempt to fix posible power issues with the sharp

Dependencies:   ADS1115 BME280 CronoDot SDFileSystem mbed

Fork of Outdoor_UPAS_v1_2_Tboard by scott kelleher

Revision:
43:05aa1fb68946
Parent:
42:c8ed2dc04dfe
Child:
44:075fa63d5df1
--- a/main.cpp	Tue May 03 03:54:50 2016 +0000
+++ b/main.cpp	Tue May 03 16:35:44 2016 +0000
@@ -11,7 +11,7 @@
 #include "EEPROM.h"
 #include "Calibration.h"
 #include "MAX_M8.h" 
-#include "DRV8830.h"
+//#include "DRV8830.h"
 #include "Tb_SD_Reader.h"
 
 
@@ -74,11 +74,10 @@
 DigitalOut      gpsEN(PB_15, 0);
 Max_M8 gps(PB_9, PB_8,(0x84));   
 
+/*
 /////////////////////////////////////////////
 //Hbridge Valve Control
 /////////////////////////////////////////////
-
-
 DRV8830    schoolF1(PB_9, PB_8, 0xC4); //Work/School Filter A HB1
 DRV8830    homeF2(PB_9, PB_8, 0xCA); //Home Filter B HB2
 DRV8830    transitF3(PB_9, PB_8, 0xCC); //Transit Filter C HB3
@@ -87,7 +86,7 @@
 DigitalIn  hb2_home(PA_7);
 DigitalIn  hb3_transit(PA_5);
 DigitalIn  hb4_blank(PA_4);
-
+*/
 
 /////////////////////////////////////////////
 //SD Card
@@ -115,6 +114,14 @@
 
 struct tm STtime;
 char timestr[32];
+char yrstr[4];
+char mostr[4];
+char daystr[4];
+char hrstr[4];
+char minstr[4];
+char secstr[4];
+
+int stYr, stMo, stDay, stHr, stMin, stSec;
 
 
 float press;
@@ -485,6 +492,52 @@
     return distance;
 }
 
+//////////////////////////////////////////////////////////////
+//Shutdown Function
+//////////////////////////////////////////////////////////////
+bool timecompare(uint8_t t_sec, uint8_t t_minutes, uint8_t t_hour, uint8_t t_date, uint8_t t_month, uint8_t t_year)
+{
+    
+     time_t seconds = time(NULL);
+    //strftime(timestr, 32, "%y%m%d%H%M%S", localtime(&seconds));
+    
+    strftime(yrstr, 4, "%y", localtime(&seconds));
+    stYr = atoi(yrstr);
+    
+    strftime(mostr, 4, "%m", localtime(&seconds));
+    stMo = atoi(mostr);
+    
+    strftime(daystr, 4, "%d", localtime(&seconds));
+    stDay = atoi(daystr);
+    
+    strftime(hrstr, 4, "%H", localtime(&seconds));
+    stHr = atoi(hrstr);
+    
+    strftime(minstr, 4, "%M", localtime(&seconds));
+    stMin = atoi(minstr);
+    
+    strftime(secstr, 4, "%S", localtime(&seconds));
+    stSec = atoi(secstr);
+    
+    if(t_year != stYr){
+        return t_year < stYr;
+    } 
+    if(t_month != stMo){
+        return t_month < stMo;
+    }
+    if(t_date != stDay){
+        return t_date < stDay;
+    }
+    if(t_hour != stHr){
+        return t_hour < stHr;
+    }
+    if(t_minutes != stMin){
+        return t_minutes < stMin;
+    }
+    return t_sec < stSec;
+
+}
+
 
 //////////////////////////////////////////////////////////////
 //Shutdown Function
@@ -495,7 +548,7 @@
     //UPDATE THIS TO WORK WITH ST RTC INSTEAD
     //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    
-    if(RTC_UPAS.compare(startAndEndTime[6], startAndEndTime[7], startAndEndTime[8], startAndEndTime[9], startAndEndTime[10], startAndEndTime[11])) {
+    if(timecompare(startAndEndTime[6], startAndEndTime[7], startAndEndTime[8], startAndEndTime[9], startAndEndTime[10], startAndEndTime[11])) {
         pbKill = 0; // this is were we shut everything down
         //pc.printf("If you're reading this something has gone very wrong.");
     }
@@ -509,10 +562,31 @@
 {
     //Get time and set RTC 
     ///////////////////////////
+    RTC_UPAS.get_time(); 
     time_t seconds = time(NULL);
     strftime(timestr, 32, "%y%m%d%H%M%S", localtime(&seconds));
-    //strftime(hrstr, 32, "%H", localtime(&seconds));
-    RTC_UPAS.get_time(); 
+
+    strftime(yrstr, 4, "%y", localtime(&seconds));
+    stYr = atoi(yrstr);
+    
+    strftime(mostr, 4, "%m", localtime(&seconds));
+    stMo = atoi(mostr);
+    
+    strftime(daystr, 4, "%d", localtime(&seconds));
+    stDay = atoi(daystr);
+    
+    strftime(hrstr, 4, "%H", localtime(&seconds));
+    stHr = atoi(hrstr);
+    
+    strftime(minstr, 4, "%M", localtime(&seconds));
+    stMin = atoi(minstr);
+    
+    strftime(secstr, 4, "%S", localtime(&seconds));
+    stSec = atoi(secstr);
+
+    pc.printf("%s,%s,%d,%s,%d,%s,%d,%s,%d,%s,%d,%s,%d\r\n", timestr,yrstr,stYr,mostr,stMo,daystr,stDay,hrstr,stHr,minstr,stMin,secstr,stSec);
+    
+ 
     
 
     
@@ -568,97 +642,7 @@
         gpslatitude = gps.lat;
         gpslongitude = gps.lon;
         gpsaltitude = gps.altitude;
-      
-        if(gpsFix){
-            
-  
-            workDistance = GPSdistanceCalc (work_lat, work_lon);
-            homeDistance = GPSdistanceCalc (home_lat, home_lon);
-            home2Distance = GPSdistanceCalc (home_lat2, home_lon2);
-            
-            RGB_LED.set_led(0,0,0);
-            
-            if(workDistance < 100) {
-                if(sampledVol < 2){
-                        pumps = 1;
-                  }
-                    
-                   if(location != 1){ 
-                    location = 1;
-                    
-                    schoolF1.getFault();
-                    homeF2.getFault();
-                    transitF3.getFault();
-                    blankF4.getFault();
-        
-                    schoolF1.drive(254); //closed = 253, open = 254
-                    homeF2.drive(253); //closed = 253, open = 254
-                    transitF3.drive(253); //closed = 253, open = 254
-                    blankF4.drive(253); //closed = 253, open = 254
-                    wait(1);
-                    schoolF1.stop();
-                    homeF2.stop();
-                    transitF3.stop();
-                    blankF4.stop();
-                    //RGB_LED.set_led(0,1,1);
-                    }
-                    
-            }else if(homeDistance < 100 || home2Distance < 100) { // 25 or 30 m instead?
-                    
-                    if(location != 2){
-                    location = 2;
-                    
-                    schoolF1.getFault();
-                    homeF2.getFault();
-                    transitF3.getFault();
-                    blankF4.getFault();
-        
-                    schoolF1.drive(253); //closed = 253, open = 254
-                    homeF2.drive(254); //closed = 253, open = 254
-                    transitF3.drive(253); //closed = 253, open = 254
-                    blankF4.drive(253); //closed = 253, open = 254
-                    wait(1);
-                    schoolF1.stop();
-                    homeF2.stop();
-                    transitF3.stop();
-                    blankF4.stop();
-                    
-                    //RGB_LED.set_led(1,0,1);
-                    }
-                    
-            }else{
-                    if(location != 3){
-                    location = 3;
-                    
-                    schoolF1.getFault();
-                    homeF2.getFault();
-                    transitF3.getFault();
-                    blankF4.getFault();
-        
-                    schoolF1.drive(253); //closed = 253, open = 254
-                    homeF2.drive(253); //closed = 253, open = 254
-                    transitF3.drive(254); //closed = 253, open = 254
-                    blankF4.drive(253); //closed = 253, open = 254
-                    wait(1);
-                    schoolF1.stop();
-                    homeF2.stop();
-                    transitF3.stop();
-                    blankF4.stop();
-                    }
-                    
-                  /*
-                    if(sampledVol < 2){
-                        RGB_LED.set_led(0,1,0);
-                  }
-                   */
-                  }
-        
-        }else if(homeDistance == 99999 && workDistance == 99999){
-                location = 0;
-                //RGB_LED.set_led(1,1,0);
-        }
-   
-//}
+    //}
     
     //Check for 3.3V rail cut out and turn off pumps in this event
     if(vInReading > 5950 && amps > 8191) {
@@ -666,32 +650,7 @@
         wait(1);
     //Turn pumps back on once the sampler is plugged in and charging after pumps shutoff and 3.3V rail drops out
     } else if(pumps == 0 && amps < 8191) {
-        
-        // If pumps are plugged in the next morning assume the sampler is at school if after 8 if no GPSfix is available
-        if(gpsFix == 0 && RTC_UPAS.hour>8){
-            gpslatitude =   work_lat; // specific to Rivendell Study. In case student forgets to plug in and teachers catch this. Assume if plugged in after 8 and no GPS signal will change to proper valve. Hopefully...
-            gpslongitude =  work_lon; // specific to Rivendell Study. In case student forgets to plug in and teachers catch this. Assume if plugged in after 8 and no GPS signal will change to proper valve. Hopefully...
-            //Adjust valves to ensure everything is in proper place before pumps restart
-            
-            schoolF1.getFault();
-            homeF2.getFault();
-            transitF3.getFault();
-            blankF4.getFault();
-
-            schoolF1.drive(254); //closed = 253, open = 254
-            homeF2.drive(253); //closed = 253, open = 254
-            transitF3.drive(253); //closed = 253, open = 254
-            blankF4.drive(253); //closed = 253, open = 254
-            wait(1);
-            schoolF1.stop();
-            homeF2.stop();
-            transitF3.stop();
-            blankF4.stop();
-        }
-            
-            
-        pumps = 1;
-            
+        pumps = 1;            
     }
           
    
@@ -817,40 +776,7 @@
     wait(10); 
     }
 
-
-    schoolF1.getFault();
-    homeF2.getFault();
-    transitF3.getFault();
-    blankF4.getFault();
-    
-    schoolF1.drive(253); //closed = 253, open = 254
-    homeF2.drive(253); //closed = 253, open = 254
-    transitF3.drive(253); //closed = 253, open = 254
-    blankF4.drive(253); //closed = 253, open = 254
-    
-    wait(1);
-    schoolF1.stop();
-    homeF2.stop();
-    transitF3.stop();
-    blankF4.stop();
-    */
-    
-    schoolF1.getFault();
-    homeF2.getFault();
-    transitF3.getFault();
-    blankF4.getFault();
-    
-    schoolF1.drive(253); //closed = 253, open = 254
-    homeF2.drive(253); //closed = 253, open = 254
-    transitF3.drive(253); //closed = 253, open = 254
-    blankF4.drive(253); //closed = 253, open = 254
-    
-    wait(1);
-    schoolF1.stop();
-    homeF2.stop();
-    transitF3.stop();
-    blankF4.stop();
-    
+*/    
       
 
     gpsEN = 1;
@@ -1001,20 +927,7 @@
     E2PROM.byteToFloat(flowRateBytes, &volflowSet);
  
 
-    time_t seconds = time(NULL);
-    strftime(timestr, 32, "%y-%m-%d-%H=%M=%S", localtime(&seconds));
-    RTC_UPAS.get_time(); 
-    if(tempSerialNum < 18){
-        sprintf(filename, "/sd/MS%04dLOG_%02d-%02d-%02d_%02d=%02d=%02d_%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c.txt",serial_num,RTC_UPAS.year,RTC_UPAS.month,RTC_UPAS.date,RTC_UPAS.hour,RTC_UPAS.minutes,RTC_UPAS.seconds,subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7],subjectLabelOriginal[8],subjectLabelOriginal[9],subjectLabelOriginal[10],subjectLabelOriginal[11],subjectLabelOriginal[12],subjectLabelOriginal[13],subjectLabelOriginal[14]);
-    
-    }
-    else{
-        sprintf(filename, "/sd/PS%04dLOG_%02d-%02d-%02d_%02d=%02d=%02d_%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c.txt",serial_num,RTC_UPAS.year,RTC_UPAS.month,RTC_UPAS.date,RTC_UPAS.hour,RTC_UPAS.minutes,RTC_UPAS.seconds,subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7],subjectLabelOriginal[8],subjectLabelOriginal[9],subjectLabelOriginal[10],subjectLabelOriginal[11],subjectLabelOriginal[12],subjectLabelOriginal[13],subjectLabelOriginal[14]);
-    }
-    //sprintf(filename, "/sd/UPAS_TboardtestLog_%s_%c%c%c%c%c%c%c%c.txt", timestr,subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7]);
-    //sprintf(filename, "/sd/UPAS_TboardtestLog_%s.txt", timestr);
-    FILE *fp = fopen(filename, "w");
-    fclose(fp);
+ 
   /*  
     while(!gpsFix){
        gpsFix = gps.read(1);
@@ -1031,33 +944,27 @@
     
 
     
-    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-    //UPDATE THIS TO WORK WITH ST RTC INSTEAD
-    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-/*
-    while(!RTC_UPAS.compare(startAndEndTime[0], startAndEndTime[1], startAndEndTime[2], startAndEndTime[3], startAndEndTime[4], startAndEndTime[5])) {  // this while waits for the start time by looping until the start time
+    while(!timecompare(startAndEndTime[0], startAndEndTime[1], startAndEndTime[2], startAndEndTime[3], startAndEndTime[4], startAndEndTime[5])) {  // this while waits for the start time by looping until the start time
             wait(0.5);
             
-            RTC_UPAS.get_time(); 
+            //RTC_UPAS.get_time(); 
 
     }
- */
-    
-    schoolF1.getFault();
-    homeF2.getFault();
-    transitF3.getFault();
-    blankF4.getFault();
+
+    time_t seconds = time(NULL);
+    strftime(timestr, 32, "%y-%m-%d-%H=%M=%S", localtime(&seconds));
+    RTC_UPAS.get_time(); 
+    if(tempSerialNum < 18){
+        sprintf(filename, "/sd/MS%04dLOG_%02d-%02d-%02d_%02d=%02d=%02d_%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c.txt",serial_num,RTC_UPAS.year,RTC_UPAS.month,RTC_UPAS.date,RTC_UPAS.hour,RTC_UPAS.minutes,RTC_UPAS.seconds,subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7],subjectLabelOriginal[8],subjectLabelOriginal[9],subjectLabelOriginal[10],subjectLabelOriginal[11],subjectLabelOriginal[12],subjectLabelOriginal[13],subjectLabelOriginal[14]);
     
-    schoolF1.drive(254); //closed = 253, open = 254
-    homeF2.drive(253); //closed = 253, open = 254
-    transitF3.drive(253); //closed = 253, open = 254
-    blankF4.drive(253); //closed = 253, open = 254
-    
-    wait(1);
-    schoolF1.stop();
-    homeF2.stop();
-    transitF3.stop();
-    blankF4.stop();
+    }
+    else{
+        sprintf(filename, "/sd/PS%04dLOG_%02d-%02d-%02d_%02d=%02d=%02d_%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c.txt",serial_num,RTC_UPAS.year,RTC_UPAS.month,RTC_UPAS.date,RTC_UPAS.hour,RTC_UPAS.minutes,RTC_UPAS.seconds,subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7],subjectLabelOriginal[8],subjectLabelOriginal[9],subjectLabelOriginal[10],subjectLabelOriginal[11],subjectLabelOriginal[12],subjectLabelOriginal[13],subjectLabelOriginal[14]);
+    }
+    //sprintf(filename, "/sd/UPAS_TboardtestLog_%s_%c%c%c%c%c%c%c%c.txt", timestr,subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7]);
+    //sprintf(filename, "/sd/UPAS_TboardtestLog_%s.txt", timestr);
+    FILE *fp = fopen(filename, "w");
+    fclose(fp);
     
     RGB_LED.set_led(1,0,1);
     
@@ -1170,88 +1077,13 @@
     wait(1);
     RGB_LED.set_led(0,0,0);
 
-    //stop.attach(&check_stop, 9);    // check if we should shut down every 9 number seconds, starting after the start.
+    stop.attach(&check_stop, 9);    // check if we should shut down every 9 number seconds, starting after the start.
     logg.attach(&log_data, logInerval);
     flowCtl.attach(&flowControl, 3);
 
 
 
 
-/*    
-    wait(60);
-    
-    schoolF1.getFault();
-    homeF2.getFault();
-    transitF3.getFault();
-    blankF4.getFault();
-    
-    schoolF1.drive(254); //closed = 253, open = 254
-    homeF2.drive(253); //closed = 253, open = 254
-    transitF3.drive(253); //closed = 253, open = 254
-    blankF4.drive(253); //closed = 253, open = 254
-    
-    wait(1);
-    schoolF1.stop();
-    homeF2.stop();
-    transitF3.stop();
-    blankF4.stop();
-            
-
-wait(60);
-    
-    schoolF1.getFault();
-    homeF2.getFault();
-    transitF3.getFault();
-    blankF4.getFault();
-    
-    schoolF1.drive(253); //closed = 253, open = 254
-    homeF2.drive(254); //closed = 253, open = 254
-    transitF3.drive(253); //closed = 253, open = 254
-    blankF4.drive(253); //closed = 253, open = 254
-    
-    wait(1);
-    schoolF1.stop();
-    homeF2.stop();
-    transitF3.stop();
-    blankF4.stop();
-    
-    wait(60);
-    
-    schoolF1.getFault();
-    homeF2.getFault();
-    transitF3.getFault();
-    blankF4.getFault();
-    
-    schoolF1.drive(253); //closed = 253, open = 254
-    homeF2.drive(253); //closed = 253, open = 254
-    transitF3.drive(254); //closed = 253, open = 254
-    blankF4.drive(253); //closed = 253, open = 254
-    
-    wait(1);
-    schoolF1.stop();
-    homeF2.stop();
-    transitF3.stop();
-    blankF4.stop();
-    
-    wait(60);
-    
-    schoolF1.getFault();
-    homeF2.getFault();
-    transitF3.getFault();
-    blankF4.getFault();
-    
-    schoolF1.drive(253); //closed = 253, open = 254
-    homeF2.drive(253); //closed = 253, open = 254
-    transitF3.drive(253); //closed = 253, open = 254
-    blankF4.drive(254); //closed = 253, open = 254
-    
-    wait(1);
-    schoolF1.stop();
-    homeF2.stop();
-    transitF3.stop();
-    blankF4.stop();
-*/
-
     //** end of initalization **//
     //---------------------------------------------------------------------------------------------//
     //---------------------------------------------------------------------------------------------//