Code supports writing to the SD card as well as working with the Volckens group smartphone apps for the mbed HRM1017
Dependencies: ADS1115 BLE_API BME280 Calibration CronoDot EEPROM LSM303 MCP40D17 NCP5623BMUTBG SDFileSystem SI1145 STC3100 mbed nRF51822
Fork of UPAS_BLE_and_USB by
Diff: main.cpp
- Revision:
- 102:d25eab697fe0
- Parent:
- 101:0c3f33f14f4f
- Child:
- 103:a2d7d946d69c
- Child:
- 104:c57913399e79
--- a/main.cpp Wed Jan 13 18:16:45 2016 +0000 +++ b/main.cpp Fri Jan 15 01:07:14 2016 +0000 @@ -103,7 +103,6 @@ //int refresh_Time = 10; // refresh time in s, note calling read_GPS()(or similar) will still take how ever long it needs(hopefully < 1s) -char device_name[] = "---------------"; char filename[] = "/sd/XXXX0000LOG000000000000---------------.txt"; SDFileSystem sd(SPIS_PSELMOSI, SPIS_PSELMISO, SPIS_PSELSCK, SPIS_PSELSS, "sd"); // I believe this matches Todd's pinout, let me know if this doesn't work. (p12, p13, p15, p14) @@ -275,16 +274,16 @@ uint8_t subjectLabelOriginal[8] = {0,}; uint8_t dataLogOriginal[1] = {0,}; uint8_t flowRateOriginal[4] = {0,}; - uint8_t presetRunModeCheck[1] = {0,}; + //uint8_t presetRunModeCheck[1] = {0,}; Commented and currently unused to prevent mem issues E2PROM.read(0x00015, sampleTimePassValues, 12); E2PROM.read(0x00001, subjectLabelOriginal,8); E2PROM.read(0x00014,dataLogOriginal,1); E2PROM.read(0x00010,flowRateOriginal,4); - E2PROM.read(0x00033,presetRunModeCheck,1); + //E2PROM.read(0x00033,presetRunModeCheck,1); //commented out mem issue ble.init(); ble.onDisconnection(disconnectionCallback); ble.onDataWritten(WrittenHandler); //add writeCharCallback (custom function) to whenever data is being written to device - UPAS_Service upasService(ble, false,rtcPassValues,sampleTimePassValues,subjectLabelOriginal,dataLogOriginal,flowRateOriginal,presetRunModeCheck); //Create a GattService that is defined in UPAS_Service.h + UPAS_Service upasService(ble, false,rtcPassValues,sampleTimePassValues,subjectLabelOriginal,dataLogOriginal,flowRateOriginal); //Create a GattService that is defined in UPAS_Service.h upasServicePtr = &upasService; //Create a pointer to the service (Allows advertisement without specifically adding the service /* setup advertising @@ -305,7 +304,9 @@ //Logic Loop waiting for responses from the BLE iPhone App. //Will not break loop without response from the app - if(presetRunModeCheck[0] != 0x0C){ + + //outer loop commented out to prevent mem issues + //if(presetRunModeCheck[0] != 0x0C){ while (1) { ble.waitForEvent(); @@ -318,13 +319,13 @@ pbKill = 0; } } - }else{ - RunReady = 12; - } + //}else{ +// RunReady = 12; +// } - //If 24 hour mode was set by app, make sure to clear it for future use - presetRunModeCheck[0] = 0x01; - E2PROM.write(0x00033,presetRunModeCheck,1); + //If 24 hour mode was set by app, make sure to clear it for next app cycle...commented out for now + // presetRunModeCheck[0] = 0x01; +// E2PROM.write(0x00033,presetRunModeCheck,1); E2PROM.read(0x00015, startAndEndTime, 12); //Grab start and end times from EEPROM while(!RTC.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 @@ -333,69 +334,74 @@ RTC.get_time(); } + //Commented out to prevent mem issues //MARK: editting 24 hour mode code here - if(RunReady == 12) { - RTC.get_time(); - startAndEndTime[6] = RTC.seconds; - startAndEndTime[7] = RTC.minutes; - startAndEndTime[8] = RTC.hour; - if(RTC.month == 1 | RTC.month == 3 | RTC.month == 5 | RTC.month == 7 | RTC.month == 8 | RTC.month == 10) { - if(RTC.date == 31) { - startAndEndTime[9] = 1; - startAndEndTime[10] = RTC.month +1; - startAndEndTime[11] = RTC.year; - } else { - startAndEndTime[9] = RTC.date+1; - startAndEndTime[10] = RTC.month; - startAndEndTime[11] = RTC.year; - } - } else if(RTC.month == 4 | RTC.month == 6 | RTC.month == 9 | RTC.month == 11) { - if(RTC.date == 30) { - startAndEndTime[9] = 1; - startAndEndTime[10] = RTC.month +1; - startAndEndTime[11] = RTC.year; - } else { - startAndEndTime[9] = RTC.date+1; - startAndEndTime[10] = RTC.month; - startAndEndTime[11] = RTC.year; - } - } else if(RTC.month == 2) { - if(RTC.year == 16 | RTC.year == 20 | RTC.year == 24| RTC.year == 28) { - if(RTC.date == 29) { - startAndEndTime[9] = 1; - startAndEndTime[10] = RTC.month +1; - startAndEndTime[11] = RTC.year; - } else { - startAndEndTime[9] = RTC.date+1; - startAndEndTime[10] = RTC.month; - startAndEndTime[11] = RTC.year; - } - } else { - if(RTC.date == 28) { - startAndEndTime[9] = 1; - startAndEndTime[10] = RTC.month +1; - startAndEndTime[11] = RTC.year; - } else { - startAndEndTime[9] = RTC.date+1; - startAndEndTime[10] = RTC.month; - startAndEndTime[11] = RTC.year; - } - } - } else if(RTC.month == 12) { - if(RTC.date == 31) { - startAndEndTime[9] = 1; - startAndEndTime[10] = 1; - startAndEndTime[11] = RTC.year+1; - } else { - startAndEndTime[9] = RTC.date+1; - startAndEndTime[10] = RTC.month; - startAndEndTime[11] = RTC.year; - } - } - } + //if(RunReady == 12) { +// RTC.get_time(); +// startAndEndTime[6] = RTC.seconds; +// startAndEndTime[7] = RTC.minutes; +// startAndEndTime[8] = RTC.hour; +// if(RTC.month == 1 | RTC.month == 3 | RTC.month == 5 | RTC.month == 7 | RTC.month == 8 | RTC.month == 10) { +// if(RTC.date == 31) { +// startAndEndTime[9] = 1; +// startAndEndTime[10] = RTC.month +1; +// startAndEndTime[11] = RTC.year; +// } else { +// startAndEndTime[9] = RTC.date+1; +// startAndEndTime[10] = RTC.month; +// startAndEndTime[11] = RTC.year; +// } +// } else if(RTC.month == 4 | RTC.month == 6 | RTC.month == 9 | RTC.month == 11) { +// if(RTC.date == 30) { +// startAndEndTime[9] = 1; +// startAndEndTime[10] = RTC.month +1; +// startAndEndTime[11] = RTC.year; +// } else { +// startAndEndTime[9] = RTC.date+1; +// startAndEndTime[10] = RTC.month; +// startAndEndTime[11] = RTC.year; +// } +// } else if(RTC.month == 2) { +// if(RTC.year == 16 | RTC.year == 20 | RTC.year == 24| RTC.year == 28) { +// if(RTC.date == 29) { +// startAndEndTime[9] = 1; +// startAndEndTime[10] = RTC.month +1; +// startAndEndTime[11] = RTC.year; +// } else { +// startAndEndTime[9] = RTC.date+1; +// startAndEndTime[10] = RTC.month; +// startAndEndTime[11] = RTC.year; +// } +// } else { +// if(RTC.date == 28) { +// startAndEndTime[9] = 1; +// startAndEndTime[10] = RTC.month +1; +// startAndEndTime[11] = RTC.year; +// } else { +// startAndEndTime[9] = RTC.date+1; +// startAndEndTime[10] = RTC.month; +// startAndEndTime[11] = RTC.year; +// } +// } +// } else if(RTC.month == 12) { +// if(RTC.date == 31) { +// startAndEndTime[9] = 1; +// startAndEndTime[10] = 1; +// startAndEndTime[11] = RTC.year+1; +// } else { +// startAndEndTime[9] = RTC.date+1; +// startAndEndTime[10] = RTC.month; +// startAndEndTime[11] = RTC.year; +// } +// } +// } //MARK: end of 24 hour mode code RGB_LED.set_led(0,1,0); + + //Get the proper serial number + E2PROM.read(0x00034, flowRateOriginal,2); + serial_num = ((uint16_t)flowRateOriginal[1] << 8) | flowRateOriginal[0]; calibrations.initialize(serial_num); blower=1; E2PROM.read(0x00014,logIntervalReadOut,1); @@ -404,15 +410,12 @@ pc.printf("You're done, you can now disconect the USB cable.\r\n"); RunReady = 0; - calibrations.initialize(serial_num); - stop.attach(&check_stop, 30); // check if we should shut down every 9 seconds, starting 60s after the start. - //Update the flow rate value stored in eeprom - uint8_t flowRateBytes[4] = {0,}; - E2PROM.read(0x00010,flowRateBytes,4); - E2PROM.byteToFloat(flowRateBytes, &volflowSet); + //Use the flow rate value stored in eeprom + E2PROM.read(0x00010,flowRateOriginal,4); + E2PROM.byteToFloat(flowRateOriginal, &volflowSet); if(volflowSet<=1.0) { gainFlow = 100; @@ -443,11 +446,11 @@ DigPot.writeRegister(digital_pot_setpoint); wait(1); blower = 1; + - - //Menu.save_menu(E2PROM, logInerval, refreshtime, volflowSet, device_name, dutyUp, dutyDown, home_lat, home_lon, work_lat, work_lon, RunReady, serial_num); //Save all data to the EEPROM - - sprintf(filename, "/sd/UPAS%04dLOG_%02d-%02d-%02d_%02d=%02d=%02d_%s.txt",serial_num,RTC.year,RTC.month,RTC.date,RTC.hour,RTC.minutes,RTC.seconds,device_name); + E2PROM.read(0x00001, subjectLabelOriginal,8); + //sprintf(filename, "/sd/%c%c%c%c%c%c%c%cLOG_%02d-%02d-%02d_%02d=%02d=%02d.txt",subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7],RTC.year,RTC.month,RTC.date,RTC.hour,RTC.minutes,RTC.seconds); + sprintf(filename, "/sd/UPAS%04dLOG_%02d-%02d-%02d_%02d=%02d=%02d_%c%c%c%c%c%c%c%c.txt",serial_num,RTC.year,RTC.month,RTC.date,RTC.hour,RTC.minutes,RTC.seconds,subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7]); FILE *fp = fopen(filename, "w"); fclose(fp);