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:
- 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);