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

Files at this revision

API Documentation at this revision

Comitter:
caseyquinn
Date:
Sat Aug 15 02:10:49 2015 +0000
Parent:
66:ebbca6a4372e
Child:
68:ca444d0760a0
Commit message:
Upon first powerup requires the menu to be brought up and time/date and sample name to be updated, once exit menu, powers down. Second power starts initialization and then runs for 24 hours or until powered down.

Changed in this revision

BLE_API.lib Show annotated file Show diff for this revision Revisions of this file
Honduras_SerialMenu.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
nRF51822.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BLE_API.lib	Sat Aug 15 02:10:49 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/Bluetooth-Low-Energy/code/BLE_API/#8d316a3271a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Honduras_SerialMenu.lib	Sat Aug 15 02:10:49 2015 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/teams/Vockens-Group-Sensors/code/Honduras_SerialMenu/#d20c82c299e5
--- a/main.cpp	Fri Aug 14 21:44:13 2015 +0000
+++ b/main.cpp	Sat Aug 15 02:10:49 2015 +0000
@@ -9,7 +9,7 @@
 #include "NCP5623BMUTBG.h"
 #include "CronoDot.h"
 #include "EEPROM.h"
-#include "UPAS_Serial.h"
+#include "Honduras_SerialMenu.h"
 
 #define SERIAL_BAUD_RATE    9600
 #define SCL         20
@@ -29,10 +29,13 @@
 NCP5623BMUTBG RGB_LED(p22, p20);
 CronoDot RTC(p22, p20);
 EEPROM          E2PROM(p22, p20);
-UPAS_Serial     Menu;
+Honduras_SerialMenu     Menu;
+DigitalOut      GPS_EN(p4,0);                     //pin 4 is used to enable and disable the GPS, in order to recive serial communications
 
 Timeout         stop;   //This is the stop call back object
 Timeout         logg;    //This is the logging call back object
+int RunReady =0;
+
 
 //UPAS0012 CALIBRATION TRANSFER FUNCTION COEFFICIENTS FROM 'UPAS v2 OSU-calibration primary flow data.xlsx'
 //mass flow sensor output signal (x) vs. mass flow (y)
@@ -63,6 +66,7 @@
 int vis;
 int ir;
 
+float compass;
 float accel_x;
 float accel_y;
 float accel_z;
@@ -80,7 +84,7 @@
 
 float massflow; //g/min
 float volflow; //L/min
-float volflowSet = 2.0; //L/min
+float volflowSet = 1.0; //L/min
 int   logInerval = 10;
 double secondsD = 0;
 float massflowSet;
@@ -97,8 +101,9 @@
 
 int dutyUp;
 int dutyDown;
+uint8_t f_sec, f_min, f_hour, f_date, f_month, f_year;
 
-int refresh_Time = 10;   // refresh time in s, note calling read_GPS()(or similar) will still take how ever long it needs(hopefully < 1s)
+//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/UPAS0012LOG000000000000---------------.txt";
@@ -109,7 +114,7 @@
 {
     //RTC.get_time(); //debug
     //pc.printf("%02d:%02d:%02d on %d/%d/%d) \r\n",RTC.hour, RTC.minutes, RTC.seconds, RTC.month, RTC.date, RTC.year);//debig
-    if(RTC.compare(Menu.f_sec, Menu.f_min, Menu.f_hour, Menu.f_day, Menu.f_month, Menu.f_year)) {
+    if(RTC.compare(f_sec, f_min, f_hour, f_date, f_month, f_year)) {
         pbKill = 0; // this is were we shut everything down
     }
     stop.detach();
@@ -165,6 +170,7 @@
 
     movementsensor.getACCEL();
     movementsensor.getCOMPASS();
+    compass = movementsensor.getCOMPASS_HEADING();
     accel_x = movementsensor.AccelData.x;
     accel_y = movementsensor.AccelData.y;
     accel_z = movementsensor.AccelData.z;
@@ -186,7 +192,7 @@
     //Mount the filesystem
     //sd.mount();
     FILE *fp = fopen(filename, "a");
-    fprintf(fp, "%02d,%02d,%02d,%02d,%02d,%02d,%1.3f,%1.3f,%2.2f,%4.2f,%2.1f,%1.3f,%1.3f,%5.1f,%1.1f,%1.1f,%1.1f,%1.1f,%d,%d,%d,%d,%d,%d,%d,%d,%d,%1.3f,%1.3f\r\n",RTC.year, RTC.month,RTC.date,RTC.hour,RTC.minutes,RTC.seconds,omronVolt,massflow,temp,press,rh,atmoRho,volflow,sampledVol,accel_x,accel_y,accel_z,accel_comp,uv,omronReading, vInReading, vBlowerReading, omronDiff,gasG.getAmps(), gasG.getVolts(), gasG.getCharge(),digital_pot_set, deltaMflow, deltaVflow);
+    fprintf(fp, "%02d,%02d,%02d,%02d,%02d,%02d,%1.3f,%1.3f,%2.2f,%4.2f,%2.1f,%1.3f,%1.3f,%5.1f,%1.1f,%1.1f,%1.1f,%1.1f,%d,%d,%d,%d,%d,%d,%d,%d,%d,%1.3f,%1.3f,%f\r\n",RTC.year, RTC.month,RTC.date,RTC.hour,RTC.minutes,RTC.seconds,omronVolt,massflow,temp,press,rh,atmoRho,volflow,sampledVol,accel_x,accel_y,accel_z,accel_comp,uv,omronReading, vInReading, vBlowerReading, omronDiff,gasG.getAmps(), gasG.getVolts(), gasG.getCharge(),digital_pot_set, deltaMflow, deltaVflow, compass);
     fclose(fp);
     //Unmount the filesystem
     //sd.unmount();
@@ -202,34 +208,32 @@
 // Setup and Initialization
 //---------------------------------------------------------------------------------------------//
 
-    RGB_LED.set_led(0,1,1);
+    
 
-    Menu.read_menu(E2PROM, refresh_Time, volflowSet, device_name, dutyUp, dutyDown);       //Read all data from the EEPROM here
-fix_error:
-    Menu.Start(pc, E2PROM, RTC, refresh_Time, volflowSet, device_name, dutyUp, dutyDown);  //Forces you to open the menu
-    Menu.save_menu(E2PROM, refresh_Time, volflowSet, device_name, dutyUp, dutyDown);       //Save all data to the EEPROM
-
+    Menu.read_menu(E2PROM, RunReady, volflowSet, device_name, dutyUp, dutyDown);       //Read all data from the EEPROM here
+    
     //Test for errors
     if(RTC.OSF()) {                 //Don't proceed if the RTC needs reset
-        RGB_LED.set_led(1,0,0); // error code/color
+        RGB_LED.set_led(0,1,1); // error code/color
         pc.printf("DATE/TIMESTAMP NEEDS TO BE RECALIBRATED!!\r\n");
-        goto fix_error;
+        Menu.Start(pc, E2PROM, RTC, RunReady, volflowSet, device_name, dutyUp, dutyDown);  //Forces you to open the menu
+        Menu.save_menu(E2PROM, RunReady, volflowSet, device_name, dutyUp, dutyDown);       //Save all data to the EEPROM
     }
-    RTC.get_time();
-    if(RTC.compare(Menu.f_sec, Menu.f_min, Menu.f_hour, Menu.f_day, Menu.f_month, Menu.f_year)) {  //Don't proceed if it's already time to stop
-        RGB_LED.set_led(1,0,0); // error code/color
-        pc.printf("Please fix the START or STOP times before exiting!\r\n");
-        goto fix_error;
-    }
-    pc.printf("You're done, you can now disconect the USB cable.");
+    
+    if(RunReady == 0){
+            RGB_LED.set_led(0,1,1); // error code/color
+            pc.printf("Change Name\r\n");
+            Menu.Start(pc, E2PROM, RTC, RunReady, volflowSet, device_name, dutyUp, dutyDown);  //Forces you to open the menu
+            RunReady = 1;
+            Menu.save_menu(E2PROM, RunReady, volflowSet, device_name, dutyUp, dutyDown);       //Save all data to the EEPROM
+            pbKill = 0;
+            }
+            
+      RunReady = 0;
+      Menu.save_menu(E2PROM, RunReady, volflowSet, device_name, dutyUp, dutyDown);       //Save all data to the EEPROM      
 
-    RGB_LED.set_led(1,1,0);
-    while(!RTC.compare(Menu.s_sec, Menu.s_min, Menu.s_hour, Menu.s_day, Menu.s_month, Menu.s_year)) {  // this while waits for the start time by looping until the start time
-        // serial print a count down??
-    }
     stop.attach(&check_stop, 60);    // check if we should shut down every 5 seconds, starting 60s after the start.
 
-
     if(volflowSet==1.0) {
         gainFlow = 100;
     } else if(volflowSet==2.0) {
@@ -259,6 +263,61 @@
     blower = 1;
 
     RTC.get_time();
+    f_sec = RTC.seconds;
+    f_min = RTC.minutes;
+    f_hour = 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){
+            f_date = 1;
+            f_month = RTC.month +1;
+            f_year = RTC.year; 
+            }
+        else{
+            f_date = RTC.date+1;
+            f_month = RTC.month;
+            f_year = RTC.year;
+            }
+        }
+    else if(RTC.month == 4 | RTC.month == 6 | RTC.month == 9 | RTC.month == 11){
+        if(RTC.date == 30){
+            f_date = 1;
+            f_month = RTC.month +1;
+            f_year = RTC.year; 
+            }
+        else{
+            f_date = RTC.date+1;
+            f_month = RTC.month;
+            f_year = RTC.year;
+            }
+        }
+    else if(RTC.month == 2){
+        if(RTC.year == 16 | RTC.year == 20 | RTC.year == 24| RTC.year == 28){
+            if(RTC.date == 29){
+                f_date = 1;
+                f_month = RTC.month +1;
+                f_year = RTC.year; 
+                }
+            else{
+                f_date = RTC.date+1;
+                f_month = RTC.month;
+                f_year = RTC.year;
+                }
+            }
+        else{
+            if(RTC.date == 28){
+                f_date = 1;
+                f_month = RTC.month +1;
+                f_year = RTC.year; 
+                }
+            else{
+                f_date = RTC.date+1;
+                f_month = RTC.month;
+                f_year = RTC.year;
+                }
+        }
+        }
+   
+    
     sprintf(filename, "/sd/UPAS0012LOG %02d-%02d-%02d %02d=%02d=%02d %s.txt",RTC.year,RTC.month,RTC.date,RTC.hour,RTC.minutes,RTC.seconds,device_name);
     FILE *fp = fopen(filename, "w");
     fclose(fp);
@@ -286,7 +345,7 @@
     //Sets the flow withen +-1.5% of the desired flow rate based on mass flow
 
     while(abs(deltaMflow)>.015) {
-
+    
         omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V
         omronVolt = (omronReading*4.096)/(32768*2);
         //Mass Flow tf from file: UPAS v2 OSU-PrimaryFlowData FullSet 2015-05-29 CQ mods.xlsx
@@ -303,6 +362,7 @@
         massflowSet = volflowSet*atmoRho;
         deltaMflow = massflow-massflowSet;
         //pc.printf("%f,%f,%f,%f,%d,%u,%x\r\n",volflow,massflow,massflowSet,deltaMflow,digital_pot_set,digital_pot_set,digital_pot_set);
+        pc.printf("%d,%d,%d,%d,%d,%d\r\n",f_sec,f_min,f_hour,f_date,f_month,f_year,digital_pot_set);
         digital_pot_set = (int)(digital_pot_set+(int)((gainFlow*deltaMflow)));
         if(digital_pot_set>=digitalpotMax) {
             digital_pot_set = digitalpotMax;
@@ -319,6 +379,8 @@
 
     sampledVol = 0.0;
     RGB_LED.set_led(0,1,0);
+    
+
 
     //** end of initalization **//
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nRF51822.lib	Sat Aug 15 02:10:49 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/Nordic-Semiconductor/code/nRF51822/#ca9c9c2cfc6a