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:
36:2e344db70d35
Parent:
35:e0bdd6389a75
Child:
37:6c2dca195871
--- a/main.cpp	Wed Apr 27 06:28:43 2016 +0000
+++ b/main.cpp	Fri Apr 29 00:59:03 2016 +0000
@@ -78,10 +78,10 @@
 /////////////////////////////////////////////
 
 
-DRV8830    schoolF1(PB_9, PB_8, 0xC4); //Work/School Filter
-DRV8830    homeF2(PB_9, PB_8, 0xCA); //Home Filter
-DRV8830    transitF3(PB_9, PB_8, 0xCC); //Transit Filter
-DRV8830    blankF4(PB_9, PB_8, 0xCE); //Blank Filter
+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
+DRV8830    blankF4(PB_9, PB_8, 0xCE); //Blank Filter D HB4
 DigitalIn  hb1_school(PA_6);
 DigitalIn  hb2_home(PA_7);
 DigitalIn  hb3_transit(PA_5);
@@ -113,6 +113,7 @@
 struct tm STtime;
 char timestr[32];
 
+
 float press;
 float temp;
 float rh;
@@ -176,11 +177,14 @@
 
 float home_lat  = 40.00000;    //40.580508;
 float home_lon  = -105.000000; //-105.081823;
+float home_lat2  = 40.00000;    //40.580508;
+float home_lon2  = -105.000000; //-105.081823;
 float work_lat  = 40.100000;   //40.594062; //40.569136;
 float work_lon  = -105.100000; //-105.075683; //-105.081966;
 int location = 0;
 
 float homeDistance = 99999;
+float home2Distance = 99999;
 float workDistance = 99999;
 
 //*************************************************//
@@ -445,9 +449,12 @@
     //Get time and set RTC 
     ///////////////////////////
     time_t seconds = time(NULL);
-    strftime(timestr, 32, "%y%m%d%H%M%S", localtime(&seconds));
+    //strftime(timestr, 32, "%y%m%d%H%M%S", localtime(&seconds));
+    //strftime(hrstr, 32, "%H", localtime(&seconds));
     RTC_UPAS.get_time(); 
     
+
+    
     //Get Sensor Data except GPS
     ////////////////////////////
     press = bmesensor.getPressure();
@@ -472,7 +479,8 @@
     
     //Check for fully charged battery
     if(bVolt > 1750 && amps > 8191) {
-               RGB_LED.set_led(0,1,0);
+               RGB_LED.set_led(0,0,0);
+               //RGB_LED.set_led(0,1,0);
     //Check for battery with ~2 hours left of runtime at 2lpm or if after 8pm to remind user to plug in sampler            
     }else if(amps > 8191 && (RTC_UPAS.hour >=20 || bVolt < 1500)) {
         if(ledOn) {
@@ -501,24 +509,87 @@
         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 < 50) {
+            if(workDistance < 100) {
+                if(sampledVol < 2){
+                        pumps = 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 < 50) { // 25 or 30 m instead?
+                    
+            }else if(homeDistance < 100 || home2Distance < 100) { // 25 or 30 m instead?
                     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{
                     location = 3;
-                    //RGB_LED.set_led(1,1,1);
+                    
+                    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);
+                //RGB_LED.set_led(1,1,0);
         }
    
 //}
@@ -534,9 +605,8 @@
         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();
@@ -551,8 +621,10 @@
             homeF2.stop();
             transitF3.stop();
             blankF4.stop();
-            */
-            //pumps = 1;
+        }
+            
+            
+        pumps = 1;
             
     }
           
@@ -594,7 +666,7 @@
     fprintf(fp, "%f,%f,%06d,%06d,", gpslatitude, gpslongitude, (long)gps.date, (long)gps.utc); 
     //fprintf(fp, "%f,%d,%f,%f,%d,", gpsspeed, gpssatellites, gpscourse, gpsaltitude, gpsFix);
     fprintf(fp, "%f,%d,%f,%d,", gpsspeed, gpssatellites, gpsaltitude, gpsFix);
-    fprintf(fp, "%f,%f,%d,%d\r\n", homeDistance, workDistance, location, pumps == 1); // test and add in speed, etc that Josh added in to match the adafruit GPS
+    fprintf(fp, "%f,%f,%f,%d,%d\r\n", homeDistance, home2Distance, workDistance, location, pumps == 1); // test and add in speed, etc that Josh added in to match the adafruit GPS
     fclose(fp);
     free(fp);
     
@@ -666,7 +738,8 @@
     
   
     RGB_LED.set_led(0,0,1);
-  
+    
+
  /*  
     while(1){
     if(sdCD == 0){
@@ -702,7 +775,7 @@
     blankF4.getFault();
     
     schoolF1.drive(253); //closed = 253, open = 254
-    homeF2.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
     
@@ -772,13 +845,20 @@
     wait(0.5);
     
     RGB_LED.set_led(1,1,1);
+    
     while(runReady!=1) {
         wait(1);
         pc.printf("Waiting for BLE instruction\r\n");
     
     }
     
-   
+    BT_SW = 0;
+    wait(1);
+    BT_IRST = 0;
+    wait(1);
+
+
+  
     E2PROM.read(0x00015, startAndEndTime, 12); //Grab start and end times from EEPROM
     RGB_LED.set_led(0,1,0);
     
@@ -805,25 +885,17 @@
     E2PROM.read(0x0005C,homeLon,4);
     E2PROM.byteToFloat(homeLon, &home_lon);
     
-    pc.printf("%f,%f\r\n%f,%f\r\n", home_lat, home_lon, work_lat, work_lon);
+    uint8_t homeLat2[4] = {0,};
+    E2PROM.read(0x00060,homeLat2,4);
+    E2PROM.byteToFloat(homeLat2, &home_lat2);
     
-    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-    //UPDATE THIS TO WORK WITH ST RTC INSTEAD
-    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-    BT_SW = 0;
-    wait(1);
-    BT_IRST = 0;
-    wait(1);
-
-    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
-            wait(0.5);
-            
-            RTC_UPAS.get_time(); 
-
-    }
-
-    //Get the subject line information
+    uint8_t homeLon2[4] = {0,};
+    E2PROM.read(0x00064,homeLon2,4);
+    E2PROM.byteToFloat(homeLon2, &home_lon2);
+    
+    pc.printf("%f,%f\r\n %f,%f\r\n %f,%f\r\n", home_lat, home_lon, work_lat, work_lon, home_lat2, home_lon2);
+    
+   //Get the subject line information
     uint8_t subjectLabelOriginal[8] = {0,};
     E2PROM.read(0x00001, subjectLabelOriginal,8);
     
@@ -863,6 +935,66 @@
     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.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]);
+    
+    }
+    else{
+        sprintf(filename, "/sd/PS%04dLOG_%02d-%02d-%02d_%02d=%02d=%02d_%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]);
+    }
+    //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);
+        if(ledOn) {
+            RGB_LED.set_led(0,0,0);
+            ledOn = 0;
+        }else {
+            RGB_LED.set_led(1,0,0);
+            ledOn = 1;
+        }
+        wait(1);
+    }
+   */
+    
+
+    
+    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+    //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
+            wait(0.5);
+            
+            RTC_UPAS.get_time(); 
+
+    }
+ */
+    
+    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(1,0,1);
+    
     if(volflowSet<=1.0) {
         gainFlow = 100;
     } else if(volflowSet>=2.0) {
@@ -870,8 +1002,7 @@
     } else {
         gainFlow = 25;
     }
-
-    RGB_LED.set_led(1,0,0);
+    
     press = bmesensor.getPressure();
     temp = bmesensor.getTemperature();
     rh = bmesensor.getHumidity();
@@ -915,23 +1046,6 @@
     wait(1);
     pumps = 1;
   
-    
-
-
-        
-    time_t seconds = time(NULL);
-    strftime(timestr, 32, "%y-%m-%d-%H=%M=%S", localtime(&seconds));
-    if(tempSerialNum < 18){
-        sprintf(filename, "/sd/MS%04dLOG_%02d-%02d-%02d_%02d=%02d=%02d_%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]);
-    
-    }
-    else{
-        sprintf(filename, "/sd/PS%04dLOG_%02d-%02d-%02d_%02d=%02d=%02d_%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]);
-    }
-    //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);
 
 
     omronReading = ads.readADC_SingleEnded(0, 0xC383); // read channel 0 PGA = 2 : Full Scale Range = 2.048V
@@ -954,6 +1068,7 @@
 
         omronReading = ads.readADC_SingleEnded(0, 0xC383); // read channel 0 PGA = 2 : Full Scale Range = 2.048V
         omronVolt = (omronReading*4.096)/(32768*1);
+        pc.printf("%d,%f\r\n", omronReading, omronVolt);
         //Mass Flow tf from file: UPAS v2 OSU-PrimaryFlowData FullSet 2015-05-29 CQ mods.xlsx
         if(omronVolt<=calibrations.omronVMin) {
             massflow = calibrations.omronMFMin;
@@ -965,6 +1080,7 @@
 
         atmoRho = ((press-((6.1078*pow((float)10,(float)((7.5*temp)/(237.3+temp))))*(rh/100)))*100)/(287.0531*(temp+273.15))+((6.1078*pow((float)10,(float)((7.5*temp)/(237.3+temp))))*(rh/100)*100)/(461.4964*(temp+273.15));
         volflow = massflow/atmoRho;
+        pc.printf("%f\r\n", volflow);
         massflowSet = volflowSet*atmoRho;
         deltaMflow = massflow-massflowSet;
 
@@ -982,15 +1098,13 @@
 
 
     }
-
-
-
+    //pumps = 0;
     sampledVol = 0.0;
     RGB_LED.set_led(0,1,0);
     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);