all working version 2.0
Dependencies: ADS1115 BME280 CronoDot SDFileSystem mbed
Fork of Outdoor_UPAS_v1_2_powerfunction by
Diff: main.cpp
- Revision:
- 4:5d004fd997d5
- Parent:
- 3:122bfc998c4c
- Child:
- 5:c3252e5d45ca
diff -r 122bfc998c4c -r 5d004fd997d5 main.cpp --- a/main.cpp Mon Feb 08 22:49:54 2016 +0000 +++ b/main.cpp Fri Feb 26 22:40:31 2016 +0000 @@ -10,8 +10,8 @@ #include "CronoDot.h" #include "EEPROM.h" #include "Calibration.h" -Serial pc(USBTX, USBRX); -Serial microChannel(D8, D2); // tx, rx +//Serial pc(USBTX, USBRX); +//Serial microChannel(D0, D1); // tx, rx Timer t; struct tm tt; @@ -20,8 +20,10 @@ MCP40D17 DigPot(&i2c); BME280 bmesensor(D14, D15); STC3100 gasG(D14, D15); -DigitalOut blower(D9, 0); -DigitalOut pbKill(D7, 1); +DigitalOut blower(D8, 0); +DigitalOut pbKill(PC_12, 1); +DigitalOut bleRTS(PB_14, 0); +DigitalOut bleCTS(PB_13, 0); LSM303 movementsensor(D14, D15); SI1145 lightsensor(D14, D15); NCP5623BMUTBG RGB_LED(D14, D15); @@ -36,6 +38,9 @@ uint16_t serial_num = 1; // Default serial/calibration number int RunReady =0; +struct tm STtime; + + float press = 1.1; float temp = 75.5; @@ -94,7 +99,7 @@ char filename[] = "/sd/XXXX0000LOG000000000000---------------.txt"; -SDFileSystem sd(D11, D12, D13, D10, "sd"); // I believe this matches Todd's pinout, let me know if this doesn't work. (p12, p13, p15, p14) +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(); @@ -114,7 +119,7 @@ static uint8_t dataLength = 0; static int runReady = 0; static uint8_t startAndEndTime[12] = {0,}; - +/* void uartMicro(void){ if(runReady!=1){ haltBLE = 2; @@ -124,7 +129,7 @@ //Code block to verify what is being transmitted. To function correctly, all data must terminate with \0 or \n if(transmissionValue==0){ - if (rx_buf[0] == 0x01)transmissionValue = 1; //rtc + if (rx_buf[0] == 0x01)transmissionValue = 1; //rtc else if(rx_buf[0] == 0x02)transmissionValue = 2; //sample start and end times else if(rx_buf[0] == 0x03)transmissionValue = 3; //sample name else if(rx_buf[0] == 0x04)transmissionValue = 4; //Send Data Check @@ -221,13 +226,13 @@ } - +*/ void check_stop() // this checks if it's time to stop and shutdown { 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."); + //pc.printf("If you're reading this something has gone very wrong."); } stop.detach(); stop.attach(&check_stop, 9); @@ -251,7 +256,7 @@ lastsecondD = secondsD; omronVolt = (omronReading*4.096)/(32768*2); - +/* 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, "%1.3f,%1.3f,%2.2f,%4.2f,%2.1f,%1.3f,", omronVolt,massflow,temp,press,rh,atmoRho); @@ -261,17 +266,30 @@ fprintf(fp, "%d,%d,%d,%1.3f,%1.3f\r\n", gasG.getVolts(), gasG.getCharge(),digital_pot_set, deltaMflow, deltaVflow); fclose(fp); //wait_ms(5); - + */ } int main(){ - - pc.baud(115200); // set what you want here depending on your terminal program speed - pc.printf("\f\n\r-------------Startup-------------\n\r"); + RGB_LED.set_led(1,1,1); + STtime.tm_sec = 10; // 0-59 + STtime.tm_min = 38; // 0-59 + STtime.tm_hour = 15; // 0-23 + STtime.tm_mday = 26; // 1-31 + STtime.tm_mon = 1; // 0-11 + STtime.tm_year = 116; // year since 1900 + time_t STseconds = mktime(&STtime); + set_time(STseconds); // Set RTC time to 16 December 2013 10:05:23 UTC + char timestr[32]; + //wait(10); + RGB_LED.set_led(0,0,1); + //pc.baud(115200); // set what you want here depending on your terminal program speed + //pc.printf("\f\n\r-------------Startup-------------\n\r"); wait(0.5); //timeout=2; + /* uint8_t serialNumberAndType[6] = {0x50,0x53}; E2PROM.read(0x00034,serialNumberAndType+2,2); + int tempSerialNum = serialNumberAndType[2]+serialNumberAndType[3]; int serialNumDigits[4]; serialNumDigits[0] = tempSerialNum / 1000 % 10; @@ -300,7 +318,7 @@ wait(0.5); - + RGB_LED.set_led(1,1,1); while(runReady!=1) { @@ -333,7 +351,7 @@ logInerval = logByte[0]; stop.attach(&check_stop, 30); // check if we should shut down every 9 seconds, starting 60s after the start. - + //Use the flow rate value stored in eeprom uint8_t flowRateBytes[4] = {0,}; E2PROM.read(0x00010,flowRateBytes,4); @@ -364,8 +382,12 @@ blower = 1; uint8_t subjectLabelOriginal[8] = {0,}; - E2PROM.read(0x00001, subjectLabelOriginal,8); + 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/UPASboardtest_%s.txt", timestr); FILE *fp = fopen(filename, "w"); fclose(fp); @@ -387,18 +409,33 @@ //logg.attach(&log_data, 30); // uses callbacks or block Interrupts for anything that uses i2c - while(!RTC_UPAS.compare(startAndEndTime[6], startAndEndTime[7], startAndEndTime[8], startAndEndTime[9], startAndEndTime[10], startAndEndTime[11])){ + // while(!RTC_UPAS.compare(startAndEndTime[6], startAndEndTime[7], startAndEndTime[8], startAndEndTime[9], startAndEndTime[10], startAndEndTime[11])){ + while(1){ wait(logInerval); RGB_LED.set_led(1,1,0); - 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, "%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\r\n", gasG.getVolts(), gasG.getCharge(),digital_pot_set, deltaMflow, deltaVflow); - fclose(fp); + + + time_t seconds = time(NULL); + strftime(timestr, 32, "%y%m%d%H%M%S", localtime(&seconds)); + press = bmesensor.getPressure(); + temp = bmesensor.getTemperature()-5.0; + rh = bmesensor.getHumidity(); + uv = lightsensor.getUV(); + + 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, "%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\r\n", gasG.getVolts(), gasG.getCharge(),digital_pot_set, deltaMflow, deltaVflow); + fclose(fp); + free(fp); + RGB_LED.set_led(1,0,0); } - RGB_LED.set_led(1,0,0); + }