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:
44:096dcb50ff08
Parent:
43:da0708632a21
Child:
45:1d06ac109d04
--- a/main.cpp	Fri Jun 12 02:01:31 2015 +0000
+++ b/main.cpp	Fri Jun 12 15:47:55 2015 +0000
@@ -50,27 +50,28 @@
 int omronReading;
 float omronVolt; //V
 float atmoRho; //g/L
-float MF0 = 7.8618;
-float MF1 = -33.538;
-float MF2 = 53.545;
-float MF3 = -34.801;
-float MF4 = 8.3314;
+float MF0 = -8.794;
+float MF1 = 27.914;
+float MF2 = -30.738;
+float MF3 = 15.031;
+float MF4 = -2.5778;
 float massflow; //g/min
 float volflow; //L/min
 float volflowSet = 1.0; //L/min
 float massflowSet;
 float deltaVflow = 0.0;
 float deltaMflow = 0.0;
-float gainFlow = 0.5;
+float gainFlow = 100;
 
 int digital_pot_setpoint; //min = 0x7F, max = 0x00
 int digital_pot_setpointCK;
+int digital_pot_set;
 int digital_pot_delta;
-float DP0 = 285.74;
-float DP1 = -461.55;
-float DP2 = 352.54;
-float DP3 = -133.93;
-float DP4 = 19.476;
+float DP0 = 376.73;
+float DP1 = -512.82;
+float DP2 = 303.77;
+float DP3 = -85.942;
+float DP4 = 9.2763;
 
 char filename[] = "/sd/UPAS0010LOG000000000000.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)
@@ -97,7 +98,6 @@
     massflowSet = volflowSet*atmoRho;
     //Digtal pot tf from file: UPAS v2 OSU-PrimaryFlowData FullSet 2015-05-29 CQ mods.xlsx
     digital_pot_setpoint = (int)floor(DP4*pow(massflowSet,4)+DP3*pow(massflowSet,3)+DP2*pow(massflowSet,2)+DP1*massflowSet+DP0); //min = 0x7F, max = 0x00
-
     DigPot.writeRegister(digital_pot_setpoint);
     wait(1);
     blower = 1;
@@ -107,28 +107,41 @@
     FILE *fp = fopen(filename, "w");
     fclose(fp);
     
-    omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V
+                
+            
+    wait(10);
+    
+   /* 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
     massflow = MF4*pow(omronVolt,(float)4)+MF3*pow(omronVolt,(float)3)+MF2*pow(omronVolt,(float)2)+MF1*omronVolt+MF0;
     digital_pot_setpointCK = (int)floor(DP4*pow(massflow,4)+DP3*pow(massflow,3)+DP2*pow(massflow,2)+DP1*massflow+DP0); //min = 0x7F, max = 0x00
     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));
+    volflow = massflow/atmoRho;
     massflowSet = volflowSet*atmoRho; 
-    deltaMflow = massflow-massflowSet;
+    deltaMflow = massflow-massflowSet;                     
+    digital_pot_set = digital_pot_setpoint - (int)floor(0.5*(digital_pot_setpoint-digital_pot_setpointCK));
+    DigPot.writeRegister(digital_pot_set);
     
-    while(abs(deltaMflow)>.05){
+    wait(5);
+    */
+    
+    while(abs(deltaMflow)>.015){
       
-            digital_pot_delta = (int)floor(gainFlow*(digital_pot_setpointCK-digital_pot_setpoint));
-            digital_pot_setpoint = digital_pot_setpoint+digital_pot_delta;
-            DigPot.writeRegister(digital_pot_setpoint);
             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
             massflow = MF4*pow(omronVolt,(float)4)+MF3*pow(omronVolt,(float)3)+MF2*pow(omronVolt,(float)2)+MF1*omronVolt+MF0;
             digital_pot_setpointCK = (int)floor(DP4*pow(massflow,4)+DP3*pow(massflow,3)+DP2*pow(massflow,2)+DP1*massflow+DP0); //min = 0x7F, max = 0x00
             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));
+            volflow = massflow/atmoRho;
             massflowSet = volflowSet*atmoRho; 
             deltaMflow = massflow-massflowSet;
+            digital_pot_delta = digital_pot_setpointCK-digital_pot_setpoint;
+            digital_pot_set = digital_pot_set+(gainFlow*deltaMflow);
+            DigPot.writeRegister(digital_pot_set);
+
+            wait(2);
             
             }
 
@@ -179,10 +192,9 @@
             massflowSet = volflowSet*atmoRho; 
             deltaMflow = massflow-massflowSet;
     
-            if(abs(deltaMflow)>.05){
-                    digital_pot_setpointCK = (int)floor(DP4*pow(massflow,4)+DP3*pow(massflow,3)+DP2*pow(massflow,2)+DP1*massflow+DP0); //min = 0x7F, max = 0x00
-                    digital_pot_setpoint = digital_pot_setpoint+(digital_pot_setpointCK+digital_pot_delta-digital_pot_setpoint);
-                    DigPot.writeRegister(digital_pot_setpoint);
+            if(abs(deltaMflow)>.025){
+            digital_pot_set = digital_pot_set+(gainFlow*deltaMflow);
+            DigPot.writeRegister(digital_pot_set);
             
                     }