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:
- 50:dddf01867e85
- Parent:
- 42:fc2f2b9f07ae
diff -r fc2f2b9f07ae -r dddf01867e85 main.cpp --- a/main.cpp Thu Jun 11 23:11:27 2015 +0000 +++ b/main.cpp Fri Jun 12 02:53:12 2015 +0000 @@ -62,10 +62,15 @@ float deltaVflow = 0.0; float deltaMflow = 0.0; float gainFlow = 0.5; +float digital_pot_maxflow = 2; +float digital_pot_minflow = 127; +float delta_tol = 0.05; +float digital_pot_startpoint = 75; int digital_pot_setpoint; //min = 0x7F, max = 0x00 int digital_pot_setpointCK; int digital_pot_delta; +float t_controlstep = 1; float DP0 = 285.74; float DP1 = -461.55; float DP2 = 352.54; @@ -96,11 +101,13 @@ 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)); 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 + //digital_pot_setpoint = (int)floor(DP4*pow(massflowSet,4)+DP3*pow(massflowSet,3)+DP2*pow(massflowSet,2)+DP1*massflowSet+DP0); //min = 0x7F, max = 0x00 + digital_pot_setpoint = digital_pot_startpoint; DigPot.writeRegister(digital_pot_setpoint); wait(1); blower = 1; + wait(1); RTCtime = RTC.get_time(); sprintf(filename, "/sd/UPAS0010LOG_%02d-%02d-%02d_%02d-%02d-%02d.txt",RTCtime[5],RTCtime[4],RTCtime[3],RTCtime[2],RTCtime[1],RTCtime[0]); @@ -148,16 +155,11 @@ //massflow = -2.662*pow(omronVolt,(float)4)+16.421*pow(omronVolt,(float)3)-35.797*pow(omronVolt,(float)2)+34.579*omronVolt-11.77; //UPAS0010=-3.6933*L14^4+21.633*L14^3-44.694*L14^2+40.387*L14-12.82 massflow = MF4*pow(omronVolt,(float)4)+MF3*pow(omronVolt,(float)3)+MF2*pow(omronVolt,(float)2)+MF1*omronVolt+MF0; - 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; deltaVflow = volflow-volflowSet; - - /*if(abs(deltaflow)>.05*volflowSet){ - digital_pot_setpoint = f(Vsetpoint); - DigPot.writeRegister(digital_pot_setpoint); - } - */ + massflowSet = volflowSet*atmoRho; + deltaMflow = massflow-massflowSet; movementsensor.getACCEL(); movementsensor.getCOMPASS(); accel_x = movementsensor.AccelData.x; @@ -177,7 +179,6 @@ vis = lightsensor.getVIS(); ir = lightsensor.getIR(); - //Mount the filesystem sd.mount(); FILE *fp = fopen(filename, "a"); @@ -186,25 +187,94 @@ //Unmount the filesystem sd.unmount(); - omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V - omronVolt = (omronReading*4.096)/(32768*2); + //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)); - massflowSet = volflowSet*atmoRho; - deltaMflow = massflow-massflowSet; + //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)); + - if(abs(deltaMflow)>.05){ - digital_pot_delta = (int)floor(gainFlow*(digital_pot_setpointCK-digital_pot_setpoint)); - digital_pot_setpoint = digital_pot_setpoint+digital_pot_delta; + if(deltaVflow>delta_tol*10){ + digital_pot_setpoint = digital_pot_setpoint+20; + DigPot.writeRegister(digital_pot_setpoint); + wait(1.5); + omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V + omronVolt = (omronReading*4.096)/(32768*2); + massflow = MF4*pow(omronVolt,(float)4)+MF3*pow(omronVolt,(float)3)+MF2*pow(omronVolt,(float)2)+MF1*omronVolt+MF0; + volflow = massflow/atmoRho; + deltaVflow = volflow-volflowSet; + } + if(deltaVflow>delta_tol*5){ + digital_pot_setpoint = digital_pot_setpoint+8; + DigPot.writeRegister(digital_pot_setpoint); + wait(1); + omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V + omronVolt = (omronReading*4.096)/(32768*2); + massflow = MF4*pow(omronVolt,(float)4)+MF3*pow(omronVolt,(float)3)+MF2*pow(omronVolt,(float)2)+MF1*omronVolt+MF0; + volflow = massflow/atmoRho; + deltaVflow = volflow-volflowSet; + } + if(deltaVflow>delta_tol*2){ + digital_pot_setpoint = digital_pot_setpoint+4; + DigPot.writeRegister(digital_pot_setpoint); + wait(1); + omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V + omronVolt = (omronReading*4.096)/(32768*2); + massflow = MF4*pow(omronVolt,(float)4)+MF3*pow(omronVolt,(float)3)+MF2*pow(omronVolt,(float)2)+MF1*omronVolt+MF0; + volflow = massflow/atmoRho; + deltaVflow = volflow-volflowSet; + } + if(deltaVflow>delta_tol){ + digital_pot_setpoint = digital_pot_setpoint+1; DigPot.writeRegister(digital_pot_setpoint); - - + wait(0.5); + omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V + omronVolt = (omronReading*4.096)/(32768*2); + massflow = MF4*pow(omronVolt,(float)4)+MF3*pow(omronVolt,(float)3)+MF2*pow(omronVolt,(float)2)+MF1*omronVolt+MF0; + volflow = massflow/atmoRho; + deltaVflow = volflow-volflowSet; + } + if(deltaVflow<-delta_tol*10){ + digital_pot_setpoint = digital_pot_setpoint+20; + DigPot.writeRegister(digital_pot_setpoint); + wait(1.5); + omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V + omronVolt = (omronReading*4.096)/(32768*2); + massflow = MF4*pow(omronVolt,(float)4)+MF3*pow(omronVolt,(float)3)+MF2*pow(omronVolt,(float)2)+MF1*omronVolt+MF0; + volflow = massflow/atmoRho; + deltaVflow = volflow-volflowSet; } - - wait(1); - + if(deltaVflow<-delta_tol*5){ + digital_pot_setpoint = digital_pot_setpoint+8; + DigPot.writeRegister(digital_pot_setpoint); + wait(1); + omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V + omronVolt = (omronReading*4.096)/(32768*2); + massflow = MF4*pow(omronVolt,(float)4)+MF3*pow(omronVolt,(float)3)+MF2*pow(omronVolt,(float)2)+MF1*omronVolt+MF0; + volflow = massflow/atmoRho; + deltaVflow = volflow-volflowSet; + } + if(deltaVflow<-delta_tol*2){ + digital_pot_setpoint = digital_pot_setpoint+4; + DigPot.writeRegister(digital_pot_setpoint); + wait(1); + omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V + omronVolt = (omronReading*4.096)/(32768*2); + massflow = MF4*pow(omronVolt,(float)4)+MF3*pow(omronVolt,(float)3)+MF2*pow(omronVolt,(float)2)+MF1*omronVolt+MF0; + volflow = massflow/atmoRho; + deltaVflow = volflow-volflowSet; + } + if(deltaVflow<-delta_tol){ + digital_pot_setpoint = digital_pot_setpoint+1; + DigPot.writeRegister(digital_pot_setpoint); + wait(0.5); + omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V + omronVolt = (omronReading*4.096)/(32768*2); + massflow = MF4*pow(omronVolt,(float)4)+MF3*pow(omronVolt,(float)3)+MF2*pow(omronVolt,(float)2)+MF1*omronVolt+MF0; + volflow = massflow/atmoRho; + deltaVflow = volflow-volflowSet; + } } } }