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:
29:fd74725294d5
Parent:
28:42932d3b105d
Child:
30:aa6324845a84
--- a/main.cpp	Sat Apr 23 00:10:57 2016 +0000
+++ b/main.cpp	Sun Apr 24 23:37:50 2016 +0000
@@ -157,7 +157,7 @@
 float gainFlow;
 float sampledVol; //L, total sampled volume
 
-int digital_pot_setpoint = 100; //min = 0x7F, max = 0x00
+int digital_pot_setpoint = 30; //min = 0x7F, max = 0x00
 int digital_pot_set;
 int digital_pot_change;
 int digitalpotMax = 127;
@@ -317,6 +317,7 @@
     uint8_t subjectLabelOriginal[9] = {0x02,0x52,0x45,0x53,0x45,0x54,0x5F,0x5F,0x5f};
     uint8_t dataLogOriginal[2] = {0x03,0x0A,};
     uint8_t flowRateOriginal[5] = {0x04,0x00,0x00,0x80,0x3F};
+    uint8_t serialBytes[3] = {0x07,0x00,0x00};
     uint8_t latLongSchoolOriginal[17] = {0x0A,0x00,0x00,0x80,0x3F,0x00,0x00,0x80,0x3F,0x00,0x00,0x80,0x3F,0x00,0x00,0x80,0x3F};
     // Latitude School EEPROM = 0x50-0x53
     // Longitude School EEPROM = 0x54-0x57
@@ -332,6 +333,7 @@
         E2PROM.read(0x00001, subjectLabelOriginal+1,8);
         E2PROM.read(0x00014,dataLogOriginal+1,1);
         E2PROM.read(0x00010,flowRateOriginal+1,4);
+        E2PROM.read(0x00034,serialBytes+1,2);
         E2PROM.read(0x00050,latLongSchoolOriginal+1,16);
     }else{
         NEW_EEPROM_CHECK[0] = 0x0A;
@@ -340,6 +342,7 @@
         E2PROM.write(0x00001, subjectLabelOriginal+1,8);
         E2PROM.write(0x00014,dataLogOriginal+1,1);
         E2PROM.write(0x00010,flowRateOriginal+1,4);
+        E2PROM.write(0x00034,serialBytes+1,2);
         E2PROM.write(0x00050,latLongSchoolOriginal+1,16);
     }
 
@@ -452,7 +455,7 @@
     amps = gasG.getAmps();
     bVolt = gasG.getVolts(); 
     bFuel = gasG.getCharge();
-    
+ /*   
     //Check for fully charged battery
     if(bVolt > 1750 && amps > 8191) {
                RGB_LED.set_led(0,1,0);
@@ -470,7 +473,7 @@
         RGB_LED.set_led(0,0,0);
     }
     
-    
+    */
     // Get GPS Data
     //////////////////////////////
     //if(gpsEN ==1){  
@@ -486,6 +489,7 @@
         if(gpsFix){
             workDistance = GPSdistanceCalc (work_lat, work_lon);
             homeDistance = GPSdistanceCalc (home_lat, home_lon);
+            RGB_LED.set_led(0,0,0);
             
             if(workDistance < 50) {
                     location = 1;
@@ -646,9 +650,10 @@
 //////////////////////////////////////////////////////////////
 int main(){
     
+  
     RGB_LED.set_led(0,0,1);
   
- /*   
+ /*  
     while(1){
     if(sdCD == 0){
        RGB_LED.set_led(0,1,0);
@@ -665,9 +670,9 @@
     transitF3.getFault();
     blankF4.getFault();
     
-    schoolF1.drive(253); //closed = 253, open = 254
+    schoolF1.drive(254); //closed = 253, open = 254
     homeF2.drive(253); //closed = 253, open = 254
-    transitF3.drive(254); //closed = 253, open = 254
+    transitF3.drive(253); //closed = 253, open = 254
     blankF4.drive(253); //closed = 253, open = 254
     
     wait(1);
@@ -690,24 +695,36 @@
     pc.printf("\f\n\r-------------Startup-------------\n\r");
     wait(0.5);
     
-   uint8_t serialNumberAndType[6] = {0x50,0x53,}; //ex) PS0018 // 0x50,0x53 <- ASCII 80 + 83 (PS) //0x4d,0x53 <- ASCII  + 83 (MS) 
+   
+   
+   uint8_t serialNumberAndType[6] = {0x50,0x53,}; //ex) PS0018 // 0x50,0x53 <- ASCII 80 + 83 (PS) //0x4d,0x53 <- ASCII  77 + 83 (MS) 
+   E2PROM.read(0x00034,serialNumberAndType+2,2);
+   
+    int tempSerialNum = ((serialNumberAndType[2]-48)*10 + serialNumberAndType[3]-48);
+    if(tempSerialNum < 18){
+        serialNumberAndType[0] = 0x4D;
+    }
     
-    E2PROM.read(0x00034,serialNumberAndType+2,2);
-    
-    int tempSerialNum = serialNumberAndType[2]+serialNumberAndType[3];
     int serialNumDigits[4];
     serialNumDigits[0] = tempSerialNum / 1000 % 10;
     serialNumDigits[1] = tempSerialNum / 100 % 10;
     serialNumDigits[2] = tempSerialNum / 10 % 10;
     serialNumDigits[3] = tempSerialNum  % 10;
     
+    
     serialNumberAndType[2] = serialNumDigits[0]+48;
     serialNumberAndType[3] = serialNumDigits[1]+48;
     serialNumberAndType[4] = serialNumDigits[2]+48;
     serialNumberAndType[5] = serialNumDigits[3]+48;
     
-   
-    RGB_LED.set_led(0,1,0);
+    /*
+    serialNumberAndType[2] = serialNumDigits[0];
+    serialNumberAndType[3] = serialNumDigits[1];
+    serialNumberAndType[4] = serialNumDigits[2];
+    serialNumberAndType[5] = serialNumDigits[3];
+    */
+    
+   RGB_LED.set_led(0,1,0);
     
     pc.attach(pc_recv);
     microChannel.attach(uartMicro,microChannel.RxIrq);
@@ -775,13 +792,35 @@
 
     }
 
-
+    //Get the subject line information
+    uint8_t subjectLabelOriginal[8] = {0,};
+    E2PROM.read(0x00001, subjectLabelOriginal,8);
     
     //Get the proper serial number
     uint8_t serialBytes[2] = {0,};
-    E2PROM.read(0x00034, serialBytes,2);    
-    serial_num = ((uint16_t)serialBytes[1] << 8) | serialBytes[0];
+    E2PROM.read(0x00034,serialBytes,2);    
+    serial_num = (uint16_t)(((serialBytes[0]-48)*10 + serialBytes[1]-48));
+    
+    
+////////////////////////////////////////////////////////////////////
+    //Temporary fix for setting serial_num
+////////////////////////////////////////////////////////////////////
+    //uint8_t serialsubjectLabelOriginal[2] = {0,};
+    //E2PROM.read(0x00001, serialsubjectLabelOriginal,2);
+    //uint8_t newserialBytes[2] = {0,};
+    
+    if(subjectLabelOriginal[2] == 95){ 
+            E2PROM.write(0x00034,subjectLabelOriginal,2); 
+            serial_num = (uint16_t)(((subjectLabelOriginal[0]-48)*10 + subjectLabelOriginal[1]-48));
+    }
+     
+    //----------------------------------------------
     calibrations.initialize(serial_num);
+    pc.printf("%d\r\n", serial_num);
+    pc.printf("%f\r\n",calibrations.MF4);
+    //----------------------------------------------
+////////////////////////////////////////////////////////////////////
+    
     
     uint8_t logByte[1] = {0,};
     E2PROM.read(0x00014,logByte,1);
@@ -791,7 +830,8 @@
     uint8_t flowRateBytes[4] = {0,};
     E2PROM.read(0x00010,flowRateBytes,4);
     E2PROM.byteToFloat(flowRateBytes, &volflowSet);
-    
+ 
+
     if(volflowSet<=1.0) {
         gainFlow = 100;
     } else if(volflowSet>=2.0) {
@@ -813,15 +853,50 @@
     pumps = 1;
     //pumpOn = 1;
 
-    uint8_t subjectLabelOriginal[8] = {0,};
-    E2PROM.read(0x00001, subjectLabelOriginal,8); 
+/* Add this chunk back in once calibrated.
+    if(volflowSet<=1.0) {
+        gainFlow = 100;
+    } else if(volflowSet>=2.0) {
+        gainFlow = 25;
+    } else {
+        gainFlow = 25;
+    }
+
+    RGB_LED.set_led(1,0,0);
+    press = bmesensor.getPressure();
+    temp = bmesensor.getTemperature();
+    rh = bmesensor.getHumidity();
+
+    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));
+    massflowSet = volflowSet*atmoRho;
+    
+    //Digtal pot tf from file: UPAS v2 OSU-PrimaryFlowData FullSet 2015-05-29 CQ mods.xlsx
+    digital_pot_setpoint = (int)floor(calibrations.DP4*pow(massflowSet,4)+calibrations.DP3*pow(massflowSet,3)+calibrations.DP2*pow(massflowSet,2)+calibrations.DP1*massflowSet+calibrations.DP0); //min = 0x7F, max = 0x00
+
+    if(digital_pot_setpoint>=digitalpotMax) {
+        digital_pot_setpoint = digitalpotMax;
+    } else if(digital_pot_setpoint<=digitalpotMin) {
+        digital_pot_setpoint = digitalpotMin;
+    }
+
+    pc.printf("%d\r\n", digital_pot_setpoint);
+    DigPot.writeRegister(digital_pot_setpoint);
+    wait(1);
+    blower = 1;
+ */   
+    
 
 
         
     time_t seconds = time(NULL);
     strftime(timestr, 32, "%y-%m-%d-%H=%M=%S", localtime(&seconds));
-
-    sprintf(filename, "/sd/AMAS%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]);
+    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");
@@ -878,6 +953,7 @@
     }
 
 */
+
     sampledVol = 0.0;
     RGB_LED.set_led(0,1,0);
     wait(1);
@@ -886,8 +962,81 @@
     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 **//
     //---------------------------------------------------------------------------------------------//
     //---------------------------------------------------------------------------------------------//