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 Volckens Group Sensors

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