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:
- 46:af5f2d7c158c
- Parent:
- 45:1d06ac109d04
- Child:
- 47:3146e8c949a9
--- a/main.cpp Fri Jun 12 22:09:00 2015 +0000 +++ b/main.cpp Sat Jun 13 23:16:47 2015 +0000 @@ -63,10 +63,8 @@ float deltaMflow = 0.0; float gainFlow = 100; -int digital_pot_setpoint; //min = 0x7F, max = 0x00 -int digital_pot_setpointCK; -int digital_pot_set; -int digital_pot_delta; +uint8_t digital_pot_setpoint; //min = 0x7F, max = 0x00 +uint8_t digital_pot_set; float DP0 = 376.73; float DP1 = -512.82; float DP2 = 303.77; @@ -98,6 +96,14 @@ 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 + + if(digital_pot_setpoint>=127){ + digital_pot_setpoint = 127; + } + else if(digital_pot_setpoint<=1){ + digital_pot_setpoint = 1; + } + DigPot.writeRegister(digital_pot_setpoint); wait(1); blower = 1; @@ -106,50 +112,62 @@ sprintf(filename, "/sd/UPAS0010LOG_%02d-%02d-%02d_%02d-%02d-%02d.txt",RTCtime[5],RTCtime[4],RTCtime[3],RTCtime[2],RTCtime[1],RTCtime[0]); FILE *fp = fopen(filename, "w"); fclose(fp); - + pc.printf("%d\r\n",digital_pot_setpoint); wait(10); - /* omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V + 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_set = digital_pot_setpoint - (int)floor(0.5*(digital_pot_setpoint-digital_pot_setpointCK)); - DigPot.writeRegister(digital_pot_set); + if(omronVolt<=0.6427){ + massflow = 0.000127; + }else if(omronVolt>=2.3){ + massflow = 3.548944; + }else{ + massflow = MF4*pow(omronVolt,(float)4)+MF3*pow(omronVolt,(float)3)+MF2*pow(omronVolt,(float)2)+MF1*omronVolt+MF0;} + deltaMflow = massflow-massflowSet; + digital_pot_set = digital_pot_setpoint; + //pc.printf("%f,%f,%f,%f,%d,%u,%x\r\n",omronVolt,massflow,massflowSet,deltaMflow,digital_pot_set,digital_pot_set,digital_pot_set); + wait(5); - wait(5); - */ 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 - 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 + if(omronVolt<=0.7){ + massflow = 0.2209; + }else if(omronVolt>=2.3){ + massflow = 3.548944; + }else{ + 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; massflowSet = volflowSet*atmoRho; deltaMflow = massflow-massflowSet; - digital_pot_delta = digital_pot_setpointCK-digital_pot_setpoint; - digital_pot_set = digital_pot_set+(gainFlow*deltaMflow); + //pc.printf("%f,%f,%f,%f,%d,%u,%x\r\n",omronVolt,massflow,massflowSet,deltaMflow,digital_pot_set,digital_pot_set,digital_pot_set); + digital_pot_set = (uint8_t)(digital_pot_set+(int8_t)((gainFlow*deltaMflow))); + if(digital_pot_set>=127){ + digital_pot_set = 127; + }else if(digital_pot_set<=1){ + digital_pot_set = 1; + } + + wait(2); DigPot.writeRegister(digital_pot_set); - - wait(2); + wait(1); + } - //wait(5); + RGB_LED.set_led(0,1,0); while(1) { - RGB_LED.set_led(0,1,0); + RTCtime = RTC.get_time(); // the way the variable RTCtime works you must save the variables in normal chars or weird things happen Seconds = RTCtime[0];//Seconds Minutes = RTCtime[1];//Minutes @@ -185,18 +203,37 @@ //UPAS0009=-2.662*L14^4+16.421*L14^3-35.797*L14^2+34.579*L14-11.77 //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; + if(omronVolt<=0.7){ + massflow = 0.2209; + }else if(omronVolt>=2.3){ + massflow = 3.548944; + }else{ + 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; massflowSet = volflowSet*atmoRho; deltaMflow = massflow-massflowSet; - + + //pc.printf("%f,%f,%f,%f,%d,%u,%x\r\n",omronVolt,massflow,massflowSet,deltaMflow,digital_pot_set,digital_pot_set,digital_pot_set); + if(abs(deltaMflow)>.025){ - digital_pot_set = digital_pot_set+(gainFlow*deltaMflow); - DigPot.writeRegister(digital_pot_set); - - } + digital_pot_set = (uint8_t)(digital_pot_set+(int8_t)(gainFlow*deltaMflow)); + + if(digital_pot_set>=127){ + digital_pot_set = 127; + RGB_LED.set_led(1,0,0); + }else if(digital_pot_set<=1){ + digital_pot_set = 1; + RGB_LED.set_led(1,0,0); + }else{ + RGB_LED.set_led(1,1,0);} + + DigPot.writeRegister(digital_pot_set); + + }else{ + RGB_LED.set_led(0,1,0);} movementsensor.getACCEL(); movementsensor.getCOMPASS(); @@ -221,7 +258,7 @@ //Mount the filesystem sd.mount(); FILE *fp = fopen(filename, "a"); - fprintf(fp, "%02d,%02d,%02d,%02d,%02d,%02d,%f,%f,%f,%f,%2.2f,%04.2f,%2.2f,%1.4f,%1.4f,%1.4f,%.0f,%.0f,%.0f,%f,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%f,%f,%d\r\n", Year,Month,Date,Hour,Minutes,Seconds,omronVolt,atmoRho,volflow,massflow,temp,press,rh,accel_x, accel_y, accel_z, mag_x, mag_y, mag_z, uv, vis, ir, omronReading,vInReading, vBlowerReading, omronDiff, gasG.getAmps(), gasG.getVolts(), gasG.getCharge(), digital_pot_setpoint,deltaMflow,deltaVflow,digital_pot_delta); + fprintf(fp, "%02d,%02d,%02d,%02d,%02d,%02d,%f,%f,%f,%f,%2.2f,%04.2f,%2.2f,%1.4f,%1.4f,%1.4f,%.0f,%.0f,%.0f,%f,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%f,%f\r\n", Year,Month,Date,Hour,Minutes,Seconds,omronVolt,atmoRho,volflow,massflow,temp,press,rh,accel_x, accel_y, accel_z, mag_x, mag_y, mag_z, uv, vis, ir, omronReading,vInReading, vBlowerReading, omronDiff, gasG.getAmps(), gasG.getVolts(), gasG.getCharge(), digital_pot_setpoint,deltaMflow,deltaVflow); fclose(fp); //Unmount the filesystem sd.unmount();