attempt to fix posible power issues with the sharp
Dependencies: ADS1115 BME280 CronoDot SDFileSystem mbed
Fork of Outdoor_UPAS_v1_2_Tboard by
Diff: main.cpp
- 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); + */ }