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:
14:7cdb643da356
Parent:
13:455601f62aad
Child:
15:e564c8031c47
--- a/main.cpp	Tue Mar 22 14:56:35 2016 +0000
+++ b/main.cpp	Tue Mar 22 15:24:29 2016 +0000
@@ -1,6 +1,4 @@
 #include "mbed.h"
-
-/*
 #include "SDFileSystem.h"
 #include "Adafruit_ADS1015.h"
 #include "MCP40D17.h"
@@ -14,24 +12,23 @@
 #include "Calibration.h"
 #include "MAX_M8.h" 
 #include "DRV8830.h"
-*/
+
 
 /////////////////////////////////////////////
 //General Items
 /////////////////////////////////////////////
-//I2C                 i2c(PB_9, PB_8);//(D14, D15); SDA,SCL
+I2C                 i2c(PB_9, PB_8);//(D14, D15); SDA,SCL
 Serial              pc(USBTX, USBRX);
 DigitalOut          blower(PA_9, 0);//(D8, 0);
 DigitalOut          pbKill(PC_12, 1); // Digital input pin that conncect to the LTC2950 battery charger used to shutdown the UPAS 
 DigitalIn           nINT(PA_15); //Connected but currently unused is a digital ouput pin from LTC2950 battery charger. http://cds.linear.com/docs/en/datasheet/295012fd.pdf
-/*
 MCP40D17            DigPot(&i2c);
 BME280              bmesensor(PB_9, PB_8);//(D14, D15);
 NCP5623BMUTBG       RGB_LED(PB_9, PB_8);//(D14, D15);
-CronoDot            RTC_UPAS(PB_9, PB_8);//(D14, D15);
+//CronoDot            RTC_UPAS(PB_9, PB_8);//(D14, D15);
 EEPROM              E2PROM(PB_9, PB_8);//(D14, D15);
 Calibration         calibrations(1);     //Default serial/calibration if there are no values for the selected option
-*/
+
 
 /////////////////////////////////////////////
 //RN4677 BT/BLE Module
@@ -42,7 +39,7 @@
 /*
 DigitalOut          BT_IRST(PC_8, 0);
 DigitalOut          BT_SW(PA_12, 0);
-
+*/
 
 /////////////////////////////////////////////
 //Analog to Digital Converter
@@ -79,6 +76,7 @@
 /////////////////////////////////////////////
 //Hbridge Valve Control
 /////////////////////////////////////////////
+/*
 DRV8830    motor1(PB_9, PB_8, 0xC4); 
 DRV8830    motor2(PB_9, PB_8, 0xCA); 
 DRV8830    motor3(PB_9, PB_8, 0xCC); 
@@ -87,14 +85,14 @@
 DigitalIn  hb_fault2(PA_7);
 DigitalIn  hb_fault3(PA_5);
 DigitalIn  hb_fault4(PA_4);
-
+*/
 /////////////////////////////////////////////
 //SD Card
 /////////////////////////////////////////////
 char filename[] = "/sd/XXXX0000LOG000000000000---------------.txt";
 SDFileSystem sd(PB_5, PB_4, PB_3, PB_6, "sd");//(D4, D5, D3, D10, "sd"); // (MOSI, MISO, SCK, SEL)
 DigitalIn    sdCD(PA_11);
-*/
+
 /////////////////////////////////////////////
 //Callbacks
 /////////////////////////////////////////////
@@ -141,7 +139,7 @@
 float massflow; //g/min
 float volflow; //L/min
 float volflowSet = 1.0; //L/min
-int   logInerval = 10; //seconds
+int   logInerval = 5;//seconds
 double secondsD = 0;
 double lastsecondD = 0;
 float massflowSet;
@@ -150,7 +148,7 @@
 float gainFlow;
 float sampledVol; //L, total sampled volume
 
-int digital_pot_setpoint; //min = 0x7F, max = 0x00
+int digital_pot_setpoint = 100; //min = 0x7F, max = 0x00
 int digital_pot_set;
 int digital_pot_change;
 int digitalpotMax = 127;
@@ -268,7 +266,7 @@
                     }
     
             }
-            /*else if(transmissionValue ==2){ //process and store sample start/end 
+            else if(transmissionValue ==2){ //process and store sample start/end 
                 if(dataLength ==12)E2PROM.write(0x00015, writeData, 12);
                 
             }else if(transmissionValue ==3){ //process and store sample name
@@ -283,7 +281,7 @@
             }else if(transmissionValue ==7){ //process and store Serial Number
                 if(dataLength ==2)E2PROM.write(0x00034,writeData,2);
             }
-            */
+            
             dataLength++;        
         }
 
@@ -295,7 +293,7 @@
     
     
 }
-/*
+
 void sendData(){
     
     uint8_t sampleTimePassValues[13] = {0x01,};
@@ -329,7 +327,7 @@
 
     
 } 
-*/
+
 //////////////////////////////////////////////////////////////
 // GPS: Degree-minute format to decimal-degrees
 //////////////////////////////////////////////////////////////
@@ -404,18 +402,50 @@
 //////////////////////////////////////////////////////////////
 void log_data()
 {
-/*
-    //RGB_LED.set_led(1,1,0);
+
+    RGB_LED.set_led(1,1,1);
         
     time_t seconds = time(NULL);
     strftime(timestr, 32, "%y%m%d%H%M%S", localtime(&seconds));
 
-    RTC_UPAS.get_time(); 
+    //RTC_UPAS.get_time(); 
     press = bmesensor.getPressure();
     temp = bmesensor.getTemperature()-5.0;
     rh = bmesensor.getHumidity();
     uv =  lightsensor.getUV();
+    movementsensor.getACCEL();
+    movementsensor.getCOMPASS();
+    compass = movementsensor.getCOMPASS_HEADING();
+    accel_x = movementsensor.AccelData.x;
+    accel_y = movementsensor.AccelData.y;
+    accel_z = movementsensor.AccelData.z;
+    accel_comp = pow(accel_x,(float)2)+pow(accel_y,(float)2)+pow(accel_z,(float)2)-1.0;
+    mag_x = movementsensor.MagData.x;
+    mag_y = movementsensor.MagData.y;
+    mag_z = movementsensor.MagData.z;
         
+    omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V
+    omronVolt = (omronReading*4.096)/(32768*2);
+    
+    if(omronVolt<=calibrations.omronVMin) {
+            massflow = calibrations.omronMFMin;
+    } else if(omronVolt>=calibrations.omronVMax) {
+            massflow = calibrations.omronMFMax;
+    } else {
+            massflow = calibrations.MF4*pow(omronVolt,(float)4)+calibrations.MF3*pow(omronVolt,(float)3)+calibrations.MF2*pow(omronVolt,(float)2)+calibrations.MF1*omronVolt+calibrations.MF0;
+    }
+    
+    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;
+    sampledVol = sampledVol + ((((float)logInerval)/60.0)*volflow);
+    deltaVflow = volflow-volflowSet;
+    massflowSet = volflowSet*atmoRho;
+    deltaMflow = massflow-massflowSet;    
+        
+    vInReading = ads.readADC_SingleEnded(1, 0xD583); // read channel 0
+    vBlowerReading = ads.readADC_SingleEnded(2, 0xE783); // read channel 0
+    omronDiff = ads.readADC_Differential(0x8583); // differential channel 2-3
+    /*    
     gps.read(1);
         
         gpsspeed = gps.speed;
@@ -478,20 +508,20 @@
                 location = 3;
               }
 
-     
+     */
     FILE *fp = fopen(filename, "a");
-    fprintf(fp, "%02d,%02d,%02d,%02d,%02d,%02d,",RTC_UPAS.year, RTC_UPAS.month,RTC_UPAS.date,RTC_UPAS.hour,RTC_UPAS.minutes,RTC_UPAS.seconds);
+    //fprintf(fp, "%02d,%02d,%02d,%02d,%02d,%02d,",RTC_UPAS.year, RTC_UPAS.month,RTC_UPAS.date,RTC_UPAS.hour,RTC_UPAS.minutes,RTC_UPAS.seconds);
     fprintf(fp, "%s,", timestr);
     fprintf(fp, "%1.3f,%1.3f,%2.2f,%4.2f,%2.1f,%1.3f,", omronVolt,massflow,temp,press,rh,atmoRho);
     fprintf(fp, "%1.3f,%5.1f,%1.1f,%1.1f,%1.1f,%1.1f,", volflow, sampledVol, accel_x, accel_y, accel_z, accel_comp);
     fprintf(fp, "%.1f,%.1f,%.1f,%.3f,%.3f,%.3f,%.1f,", angle_x,angle_y,angle_z,mag_x, mag_y, mag_z,compass);
     fprintf(fp, "%d,%d,%d,%d,%d,%d," ,uv,omronReading, vInReading, vBlowerReading, omronDiff,gasG.getAmps());
     fprintf(fp, "%d,%d,%d,%1.3f,%1.3f,", gasG.getVolts(), gasG.getCharge(),digital_pot_set, deltaMflow, deltaVflow);
-    fprintf(fp, "%.4f,%.4f,%06d,%06d,%f,%d,%f,\r\n",  gps.lat, gps.lon, (long)gps.date, (long)gps.utc, gpsspeed, gpssatellites,  gpsaltitude); // test and add in speed, etc that Josh added in to match the adafruit GPS
+    //fprintf(fp, "%.4f,%.4f,%06d,%06d,%f,%d,%f,\r\n",  gps.lat, gps.lon, (long)gps.date, (long)gps.utc, gpsspeed, gpssatellites,  gpsaltitude); // test and add in speed, etc that Josh added in to match the adafruit GPS
     fclose(fp);
     free(fp);
-    RGB_LED.set_led(1,0,0);
-*/
+    RGB_LED.set_led(0,1,0);
+
 
 pc.printf("%s,", timestr);
 
@@ -555,6 +585,16 @@
 //Main Function
 //////////////////////////////////////////////////////////////
 int main(){
+    
+    RGB_LED.set_led(0,0,1);
+    STtime.tm_sec = 10;    // 0-59
+    STtime.tm_min = 51;    // 0-59
+    STtime.tm_hour = 21;   // 0-23
+    STtime.tm_mday = 17;   // 1-31
+    STtime.tm_mon = 11;     // 0-11
+    STtime.tm_year = 115;  // year since 1900
+    time_t seconds = mktime(&STtime);
+    wait(5);
 
 /*
     motor1.drive(254); //closed = 253, open = 254
@@ -613,22 +653,22 @@
     
     }
     
-/*   
+   
     E2PROM.read(0x00015, startAndEndTime, 12); //Grab start and end times from EEPROM
     RGB_LED.set_led(0,1,0);
-*/    
+    
     //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     //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(); 
 
     }
-*/
-/*
+
+
     
     //Get the proper serial number
     uint8_t serialBytes[2] = {0,};
@@ -652,7 +692,7 @@
     } else {
         gainFlow = 25;
     }
-
+*/
     RGB_LED.set_led(1,0,0);
     press = bmesensor.getPressure();
     temp = bmesensor.getTemperature();
@@ -670,15 +710,16 @@
 
 
         
-    time_t seconds = time(NULL);
+    seconds = time(NULL);
     strftime(timestr, 32, "%y-%m-%d-%H=%M=%S", localtime(&seconds));
 
     //sprintf(filename, "/sd/UPAS%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_%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, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V
     omronVolt = (omronReading*4.096)/(32768*2);
     if(omronVolt<=calibrations.omronVMin) {
@@ -727,12 +768,12 @@
 
 
     }
-
+*/
     sampledVol = 0.0;
     RGB_LED.set_led(0,1,0);
-*/
+
   //  stop.attach(&check_stop, 9);    // check if we should shut down every 9 number seconds, starting after the start.
- //   logg.attach(&log_data, logInerval);
+    logg.attach(&log_data, logInerval);
     //flowCtl.attach(&flowControl, 1);
             
 
@@ -743,10 +784,12 @@
 
     while (1) {
         // Do other things...
+        /*
         blower = 1;
         wait(5);
         blower = 0;
         wait(5);
+        */
     }