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 9:8646fd501832, committed 2016-03-02
- Comitter:
- caseyquinn
- Date:
- Wed Mar 02 17:16:43 2016 +0000
- Parent:
- 8:c4a8f9b67cee
- Child:
- 10:06fbb1c9e3bd
- Commit message:
- General code cleaning and also added in the chronodot RTC into the log file for now.
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Mar 02 16:49:59 2016 +0000
+++ b/main.cpp Wed Mar 02 17:16:43 2016 +0000
@@ -34,10 +34,10 @@
//DigitalOut GPS_EN(p4,0); //pin 4 is used to enable and disable the GPS, in order to recive serial communications
Calibration calibrations(1); //Default serial/calibration if there are no values for the selected option
-Timeout stop; //This is the stop callback object
-//Timeout logg;
+
+Ticker stop; //This is the stop callback object
Ticker logg; //This is the logging callback object
-Ticker flowCtl; //This is the control loop callback object
+Ticker flowCtl; //This is the control loop callback object
uint16_t serial_num = 1; // Default serial/calibration number
int RunReady =0;
@@ -45,69 +45,64 @@
struct tm STtime;
char timestr[32];
-float press = 1.1;
-float temp = 75.5;
-float rh = 12.1;
+float press;
+float temp;
+float rh;
-int uv = 8;
-int vis = 7;
-int ir = 6;
+int uv;
+int vis;
+int ir;
-float compass = 0.1;
-float accel_x = 0.2;
-float accel_y = 0.3;
-float accel_z = 0.4;
-float accel_comp = 0.5;
-float angle_x = 0.6;
-float angle_y = 0.7;
-float angle_z = 0.8;
-float mag_x = 0.9;
-float mag_y = 1.0;
-float mag_z = 1.2;
+float compass;
+float accel_x;
+float accel_y;
+float accel_z;
+float accel_comp;
+float angle_x;
+float angle_y;
+float angle_z;
+float mag_x;
+float mag_y;
+float mag_z;
-int vInReading = 18;
-int vBlowerReading = 19;
-int omronDiff = 20;
-float omronVolt = 1.2; //V
-int omronReading = 100;
-float atmoRho = 1.5; //g/L
+int vInReading;
+int vBlowerReading;
+int omronDiff;
+float omronVolt; //V
+int omronReading;
+float atmoRho; //g/L
-float massflow = 87.6; //g/min
-float volflow = 88.8; //L/min
+float massflow; //g/min
+float volflow; //L/min
float volflowSet = 1.0; //L/min
int logInerval = 10; //seconds
double secondsD = 0;
double lastsecondD = 0;
-float massflowSet = 19.2;
+float massflowSet;
float deltaVflow = 0.0;
float deltaMflow = 0.0;
-float gainFlow = 98.1;
-float sampledVol = 2.0; //L, total sampled volume
+float gainFlow;
+float sampledVol; //L, total sampled volume
-int digital_pot_setpoint = 5 ; //min = 0x7F, max = 0x00
-int digital_pot_set = 6;
-int digital_pot_change = 7;
+int digital_pot_setpoint; //min = 0x7F, max = 0x00
+int digital_pot_set;
+int digital_pot_change;
int digitalpotMax = 127;
-int digitalpotMin = 2;
+int digitalpotMin = 10;
int dutyUp = 4;
int dutyDown = 3;
// variables are only place holders for the US_Menu //
-int refreshtime = 6;
+int refreshtime;
//int refresh_Time = 10; // refresh time in s, note calling read_GPS()(or similar) will still take how ever long it needs(hopefully < 1s)
float home_lat, home_lon, work_lat, work_lon;
//*************************************************//
-
-
char filename[] = "/sd/XXXX0000LOG000000000000---------------.txt";
-
SDFileSystem sd(D4, D5, D3, D10, "sd"); // I believe this matches Todd's pinout, let me know if this doesn't work. (MOSI, MISO, SCK, SEL)
void sendData();
-
-
static uint8_t rx_buf[20];
static uint8_t rx_len=0;
static int haltBLE = 1;
@@ -117,7 +112,11 @@
static int runReady = 0;
static uint8_t startAndEndTime[12] = {0,};
-void uartMicro(void){
+//////////////////////////////////////////////////////////////
+//BLE Functions
+//////////////////////////////////////////////////////////////
+
+void uartMicro(){
if(runReady!=1){
haltBLE = 2;
while(microChannel.readable()){
@@ -236,27 +235,32 @@
}
-
+//////////////////////////////////////////////////////////////
+//Shutdown Function
+//////////////////////////////////////////////////////////////
void check_stop() // this checks if it's time to stop and shutdown
{
-
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ //UPDATE THIS TO WORK WITH ST RTC INSTEAD
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if(RTC_UPAS.compare(startAndEndTime[6], startAndEndTime[7], startAndEndTime[8], startAndEndTime[9], startAndEndTime[10], startAndEndTime[11])) {
pbKill = 0; // this is were we shut everything down
//pc.printf("If you're reading this something has gone very wrong.");
}
- stop.detach();
- stop.attach(&check_stop, 9);
}
-
+//////////////////////////////////////////////////////////////
+//SD Logging Function
+//////////////////////////////////////////////////////////////
void log_data()
{
- RGB_LED.set_led(1,1,0);
+ RGB_LED.set_led(1,1,0);
time_t seconds = time(NULL);
strftime(timestr, 32, "%y%m%d%H%M%S", localtime(&seconds));
+ RTC_UPAS.get_time();
press = bmesensor.getPressure();
temp = bmesensor.getTemperature()-5.0;
rh = bmesensor.getHumidity();
@@ -264,9 +268,7 @@
FILE *fp = fopen(filename, "a");
- //fprintf(fp, "Time as a basic string = %s\r\n", ctime(&seconds));
- //fprintf(fp, "Time as a basic string = %s\r\n", timestr);
- //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);
@@ -279,6 +281,9 @@
}
+//////////////////////////////////////////////////////////////
+//Flow Control Function
+//////////////////////////////////////////////////////////////
void flowControl()
{
RGB_LED.set_led(0,1,0);
@@ -326,6 +331,10 @@
//RGB_LED.set_led(0,1,0);
}
}
+
+//////////////////////////////////////////////////////////////
+//Main Function
+//////////////////////////////////////////////////////////////
int main(){
//wait(10);
@@ -352,7 +361,6 @@
//pc.attach(pc_recv);
microChannel.attach(uartMicro,microChannel.RxIrq);
microChannel.baud(115200);
- //RGB_LED.set_led(1,0,0);
microChannel.printf("$$$");
wait(0.5);
microChannel.printf("SN,");
@@ -375,7 +383,6 @@
}
- //wait(1);
E2PROM.read(0x00015, startAndEndTime, 12); //Grab start and end times from EEPROM
RGB_LED.set_led(0,1,0);
@@ -423,9 +430,6 @@
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
-
-
DigPot.writeRegister(digital_pot_setpoint);
@@ -434,22 +438,19 @@
uint8_t subjectLabelOriginal[8] = {0,};
E2PROM.read(0x00001, subjectLabelOriginal,8);
- //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]);
time_t 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/UPASboardtest_%s.txt", timestr);
FILE *fp = fopen(filename, "w");
fclose(fp);
- //---------------------------------------------------------------------------------------------//
- //Following lines are needed to enter into the initiallization flow control loop
-
sampledVol = 0.0;
RGB_LED.set_led(0,1,0);
- //log_data();
- stop.attach(&check_stop, 31); // check if we should shut down every 9 seconds, starting 60s 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, 1);
