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:
- 44:096dcb50ff08
- Parent:
- 43:da0708632a21
- Child:
- 45:1d06ac109d04
diff -r da0708632a21 -r 096dcb50ff08 main.cpp --- 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); }