Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ADS1115 BME280 CronoDot SDFileSystem mbed
Fork of Outdoor_UPAS_v1_2_Tboard by
Revision 36:2e344db70d35, committed 2016-04-29
- Comitter:
- caseyquinn
- Date:
- Fri Apr 29 00:59:03 2016 +0000
- Parent:
- 35:e0bdd6389a75
- Child:
- 37:6c2dca195871
- Commit message:
- Rivendell 20160502 code
Changed in this revision
| TboardSampler_Calibration.lib | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/TboardSampler_Calibration.lib Wed Apr 27 06:28:43 2016 +0000 +++ b/TboardSampler_Calibration.lib Fri Apr 29 00:59:03 2016 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/Vockens-Group-Sensors/code/TboardSampler_Calibration/#3e7cf466b84a +https://developer.mbed.org/teams/Vockens-Group-Sensors/code/TboardSampler_Calibration/#1e9aac86fbf7
--- 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);
