POC Breath using SMD commercial sensors
Dependencies: iAQ_Core Adafruit_SGP30_mbed mbed BME680
Revision 10:aad246b57873, committed 2020-06-14
- Comitter:
- christodoulos
- Date:
- Sun Jun 14 15:47:13 2020 +0000
- Parent:
- 9:81d1b4833516
- Commit message:
- CO2 back to 9 samples
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Sun Jun 14 15:13:58 2020 +0000 +++ b/main.cpp Sun Jun 14 15:47:13 2020 +0000 @@ -113,7 +113,7 @@ wait(0.5); ttl.printf("$$");//enter command mode wait(0.5); - ttl.printf("SN,POC Breath v3\r");//set new name + ttl.printf("SN,POC Breath\r");//set new name wait(0.5); ttl.printf("SS,C0\r");//set transparent uart wait(0.5); @@ -232,9 +232,9 @@ int solstart=0; //FLAG for starting calculations for detecting plateau int m=0; - int myArray[5]; //sampling 5 values of CO2 - unsigned int sum=0; //sum of 5 samples of CO2 - int avg=0; //average of 5 samples of CO2 + int myArray[9]; //sampling 9 values of CO2 + unsigned int sum=0; //sum of 9 samples of CO2 + int avg=0; //average of 9 samples of CO2 int difSum=0; //used for the Standard deviation algorithm long double var=0.0; //used for the Standard deviation algorithm float sigma=0.0; //final value for standar deviation @@ -260,7 +260,9 @@ myiAQ_Core.iAQ_Core_GetNewReading ( &myiAQ_Core_data ); //Measurement from iAQ-Core C wait(0.1); sgp30.IAQmeasure();//Measurement from SGP30 + rslt = myBME680.bme680_get_sensor_data ( &data, &gas_sensor ); //Measurement for BME680 + ZMODtemp.write(ZMODTEMPaddr,wInit,2); //maybe? ZMODtemp.write(ZMODTEMPaddr,wTemp,1); ZMODtemp.read(ZMODTEMPaddr,rTemp,2); //Returns 2 bytes @@ -268,8 +270,8 @@ float SiTemp=((175.72*temp_code)/65536)-46.85; ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f,ic%d,iv%d,ir%d,gc%d,gv%d,br%d,bt%.2f,bh%.2f,bp%.2f,zi%f,zh%f,zc%f,st%.2f\n",0.00,flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read(),myiAQ_Core_data.pred, myiAQ_Core_data.Tvoc, myiAQ_Core_data.resistance, sgp30.eCO2,sgp30.TVOC, data.gas_resistance,( data.temperature/100.0f ), ( data.humidity / 1000.0f ), ( data.pressure / 100.0f ),0.00,0.00,0.00,SiTemp); //Results after 5 mins of ON rslt = myBME680.bme680_set_sensor_mode ( &gas_sensor ); //BME680 reset - wait(0.1); - + + wait(0.01); if (bf==0) { //finding base flow before breath for(i=0; i<4; i++) { bfArray[i]=flow(); @@ -277,7 +279,7 @@ } fv=sf/4; //fv=fv+0.2; - fv=0.4; + fv=0.1; //ttl.printf("set\n"); bf=1; } @@ -295,32 +297,37 @@ //Takes 9 samples of CO2: //I have also included printing the values inside the loops so we don't loose any data during calculatins. - for(m=0; m<4; m++) { + for(m=0; m<9; m++) { //ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f\n",getTemp(),flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read()); //chemical sensor myiAQ_Core.iAQ_Core_GetNewReading ( &myiAQ_Core_data ); //Measurement from iAQ-Core C wait(0.1); sgp30.IAQmeasure();//Measurement from SGP30 + rslt = myBME680.bme680_get_sensor_data ( &data, &gas_sensor ); //Measurement for BME680 + ZMODtemp.write(ZMODTEMPaddr,wInit,2); //maybe? ZMODtemp.write(ZMODTEMPaddr,wTemp,1); ZMODtemp.read(ZMODTEMPaddr,rTemp,2); //Returns 2 bytes float temp_code=(rTemp[0]<<8)+rTemp[1]; float SiTemp=((175.72*temp_code)/65536)-46.85; + ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f,ic%d,iv%d,ir%d,gc%d,gv%d,br%d,bt%.2f,bh%.2f,bp%.2f,zi%f,zh%f,zc%f,st%.2f\n",0.00,flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read(),myiAQ_Core_data.pred, myiAQ_Core_data.Tvoc, myiAQ_Core_data.resistance, sgp30.eCO2,sgp30.TVOC, data.gas_resistance,( data.temperature/100.0f ), ( data.humidity / 1000.0f ), ( data.pressure / 100.0f ),0.00,0.00,0.00,SiTemp); //Results after 5 mins of ON rslt = myBME680.bme680_set_sensor_mode ( &gas_sensor ); //BME680 reset - wait(0.1); - + myArray[m]=carbon(); wait(0.1); } while(flags==0) { //While "flags" is enabled, keeps calculating the standard deviation. - for(int m=0; m<4; m++) { + for(int m=0; m<9; m++) { //ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f\n",getTemp(),flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read()); //chemical sensor + myiAQ_Core.iAQ_Core_GetNewReading ( &myiAQ_Core_data ); //Measurement from iAQ-Core C wait(0.1); sgp30.IAQmeasure();//Measurement from SGP30 + rslt = myBME680.bme680_get_sensor_data ( &data, &gas_sensor ); //Measurement for BME680 + ZMODtemp.write(ZMODTEMPaddr,wInit,2); //maybe? ZMODtemp.write(ZMODTEMPaddr,wTemp,1); ZMODtemp.read(ZMODTEMPaddr,rTemp,2); //Returns 2 bytes @@ -328,18 +335,20 @@ float SiTemp=((175.72*temp_code)/65536)-46.85; ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f,ic%d,iv%d,ir%d,gc%d,gv%d,br%d,bt%.2f,bh%.2f,bp%.2f,zi%f,zh%f,zc%f,st%.2f\n",0.00,flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read(),myiAQ_Core_data.pred, myiAQ_Core_data.Tvoc, myiAQ_Core_data.resistance, sgp30.eCO2,sgp30.TVOC, data.gas_resistance,( data.temperature/100.0f ), ( data.humidity / 1000.0f ), ( data.pressure / 100.0f ),0.00,0.00,0.00,SiTemp); //Results after 5 mins of ON rslt = myBME680.bme680_set_sensor_mode ( &gas_sensor ); //BME680 reset - wait(0.1); + sum+=myArray[m]; wait(0.1); } - avg=sum/4; - for(int m=0; m<4; m++) { + avg=sum/9; + for(int m=0; m<9; m++) { //ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f\n",getTemp(),flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read()); //chemical sensor myiAQ_Core.iAQ_Core_GetNewReading ( &myiAQ_Core_data ); //Measurement from iAQ-Core C wait(0.1); sgp30.IAQmeasure();//Measurement from SGP30 + rslt = myBME680.bme680_get_sensor_data ( &data, &gas_sensor ); //Measurement for BME680 + ZMODtemp.write(ZMODTEMPaddr,wInit,2); //maybe? ZMODtemp.write(ZMODTEMPaddr,wTemp,1); ZMODtemp.read(ZMODTEMPaddr,rTemp,2); //Returns 2 bytes @@ -347,23 +356,25 @@ float SiTemp=((175.72*temp_code)/65536)-46.85; ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f,ic%d,iv%d,ir%d,gc%d,gv%d,br%d,bt%.2f,bh%.2f,bp%.2f,zi%f,zh%f,zc%f,st%.2f\n",0.00,flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read(),myiAQ_Core_data.pred, myiAQ_Core_data.Tvoc, myiAQ_Core_data.resistance, sgp30.eCO2,sgp30.TVOC, data.gas_resistance,( data.temperature/100.0f ), ( data.humidity / 1000.0f ), ( data.pressure / 100.0f ),0.00,0.00,0.00,SiTemp); //Results after 5 mins of ON rslt = myBME680.bme680_set_sensor_mode ( &gas_sensor ); //BME680 reset - wait(0.1); + difSum+=(myArray[m]-avg)*(myArray[m]-avg); //Find sum of difference between value X and mean wait(0.1); } - var=difSum/4; + var=difSum/9; sigma=sqrt(var); if (sigma<0.02) { //if SD is less than 0.02 it means that it is too early to start the plateau //So we shift all but the first sample and define the new set of arrays: - for(int m=0; m<4; m++) { + for(int m=0; m<8; m++) { //ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f\n",getTemp(),flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read()); //chemical sensor myiAQ_Core.iAQ_Core_GetNewReading ( &myiAQ_Core_data ); //Measurement from iAQ-Core C wait(0.1); sgp30.IAQmeasure();//Measurement from SGP30 + rslt = myBME680.bme680_get_sensor_data ( &data, &gas_sensor ); //Measurement for BME680 + ZMODtemp.write(ZMODTEMPaddr,wInit,2); //maybe? ZMODtemp.write(ZMODTEMPaddr,wTemp,1); ZMODtemp.read(ZMODTEMPaddr,rTemp,2); //Returns 2 bytes @@ -371,12 +382,12 @@ float SiTemp=((175.72*temp_code)/65536)-46.85; ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f,ic%d,iv%d,ir%d,gc%d,gv%d,br%d,bt%.2f,bh%.2f,bp%.2f,zi%f,zh%f,zc%f,st%.2f\n",0.00,flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read(),myiAQ_Core_data.pred, myiAQ_Core_data.Tvoc, myiAQ_Core_data.resistance, sgp30.eCO2,sgp30.TVOC, data.gas_resistance,( data.temperature/100.0f ), ( data.humidity / 1000.0f ), ( data.pressure / 100.0f ),0.00,0.00,0.00,SiTemp); //Results after 5 mins of ON rslt = myBME680.bme680_set_sensor_mode ( &gas_sensor ); //BME680 reset - wait(0.1); + myArray[m]=myArray[m+1]; //Shift all CO2 values to the left by 1 value wait(0.1); } - myArray[4]=carbon(); //assign a new value for the 9th sample + myArray[8]=carbon(); //assign a new value for the 9th sample } //The new set of arrays are now generated and is sent back to be used for preveious SD calculations. //If sigma for the new set is still small, a newer set will be generated and replaced @@ -387,16 +398,17 @@ myiAQ_Core.iAQ_Core_GetNewReading ( &myiAQ_Core_data ); //Measurement from iAQ-Core C wait(0.1); sgp30.IAQmeasure();//Measurement from SGP30 + rslt = myBME680.bme680_get_sensor_data ( &data, &gas_sensor ); //Measurement for BME680 + ZMODtemp.write(ZMODTEMPaddr,wInit,2); //maybe? ZMODtemp.write(ZMODTEMPaddr,wTemp,1); ZMODtemp.read(ZMODTEMPaddr,rTemp,2); //Returns 2 bytes float temp_code=(rTemp[0]<<8)+rTemp[1]; float SiTemp=((175.72*temp_code)/65536)-46.85; - ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f,ic%d,iv%d,ir%d,gc%d,gv%d,br%d,bt%.2f,bh%.2f,bp%.2f,zi%f,zh%f,zc%f,st%.2f\n",0.00,flow(), 0.00,s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read(),myiAQ_Core_data.pred, myiAQ_Core_data.Tvoc, myiAQ_Core_data.resistance, sgp30.eCO2,sgp30.TVOC, data.gas_resistance,( data.temperature/100.0f ), ( data.humidity / 1000.0f ), ( data.pressure / 100.0f ),0.00,0.00,0.00,SiTemp); //Results after 5 mins of ON - rslt = myBME680.bme680_set_sensor_mode ( &gas_sensor ); //BME680 reset - wait(0.1); - + ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f,ic%d,iv%d,ir%d,gc%d,gv%d,br%d,bt%.2f,bh%.2f,bp%.2f,zi%f,zh%f,zc%f,st%.2f\n",0.00,flow(),0.00,s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read(),myiAQ_Core_data.pred, myiAQ_Core_data.Tvoc, myiAQ_Core_data.resistance, sgp30.eCO2,sgp30.TVOC, data.gas_resistance,( data.temperature/100.0f ), ( data.humidity / 1000.0f ), ( data.pressure / 100.0f ),0.00,0.00,0.00,SiTemp); //Results after 5 mins of ON + rslt = myBME680.bme680_set_sensor_mode ( &gas_sensor ); //BME680 reset + //led=0.4f; //The brightness is reduced to half during the plateau wait(0.1); flags=1; //breakes the while loop @@ -408,12 +420,14 @@ if ((measurement_started == 1) and (solend==1)) { // same process happens for finishing the plateau: - for(m=0; m<4; m++) { + for(m=0; m<9; m++) { //ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f\n",getTemp(),flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read()); //chemical sensor myiAQ_Core.iAQ_Core_GetNewReading ( &myiAQ_Core_data ); //Measurement from iAQ-Core C wait(0.1); sgp30.IAQmeasure();//Measurement from SGP30 + rslt = myBME680.bme680_get_sensor_data ( &data, &gas_sensor ); //Measurement for BME680 + ZMODtemp.write(ZMODTEMPaddr,wInit,2); //maybe? ZMODtemp.write(ZMODTEMPaddr,wTemp,1); ZMODtemp.read(ZMODTEMPaddr,rTemp,2); //Returns 2 bytes @@ -421,17 +435,19 @@ float SiTemp=((175.72*temp_code)/65536)-46.85; ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f,ic%d,iv%d,ir%d,gc%d,gv%d,br%d,bt%.2f,bh%.2f,bp%.2f,zi%f,zh%f,zc%f,st%.2f\n",0.00,flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read(),myiAQ_Core_data.pred, myiAQ_Core_data.Tvoc, myiAQ_Core_data.resistance, sgp30.eCO2,sgp30.TVOC, data.gas_resistance,( data.temperature/100.0f ), ( data.humidity / 1000.0f ), ( data.pressure / 100.0f ),0.00,0.00,0.00,SiTemp); //Results after 5 mins of ON rslt = myBME680.bme680_set_sensor_mode ( &gas_sensor ); //BME680 reset - wait(0.1); + myArray[m]=carbon(); wait(0.1); } while(flage==0) { - for(int m=0; m<4; m++) { + for(int m=0; m<9; m++) { //ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f\n",getTemp(),flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read()); //chemical sensor myiAQ_Core.iAQ_Core_GetNewReading ( &myiAQ_Core_data ); //Measurement from iAQ-Core C wait(0.1); sgp30.IAQmeasure();//Measurement from SGP30 + rslt = myBME680.bme680_get_sensor_data ( &data, &gas_sensor ); //Measurement for BME680 + ZMODtemp.write(ZMODTEMPaddr,wInit,2); //maybe? ZMODtemp.write(ZMODTEMPaddr,wTemp,1); ZMODtemp.read(ZMODTEMPaddr,rTemp,2); //Returns 2 bytes @@ -439,17 +455,19 @@ float SiTemp=((175.72*temp_code)/65536)-46.85; ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f,ic%d,iv%d,ir%d,gc%d,gv%d,br%d,bt%.2f,bh%.2f,bp%.2f,zi%f,zh%f,zc%f,st%.2f\n",0.00,flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read(),myiAQ_Core_data.pred, myiAQ_Core_data.Tvoc, myiAQ_Core_data.resistance, sgp30.eCO2,sgp30.TVOC, data.gas_resistance,( data.temperature/100.0f ), ( data.humidity / 1000.0f ), ( data.pressure / 100.0f ),0.00,0.00,0.00,SiTemp); //Results after 5 mins of ON rslt = myBME680.bme680_set_sensor_mode ( &gas_sensor ); //BME680 reset - wait(0.1); + sum2+=myArray[m]; wait(0.1); } - avg2=sum2/4; - for(int m=0; m<4; m++) { + avg2=sum2/9; + for(int m=0; m<9; m++) { //ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f\n",getTemp(),flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read()); //chemical sensor myiAQ_Core.iAQ_Core_GetNewReading ( &myiAQ_Core_data ); //Measurement from iAQ-Core C wait(0.1); sgp30.IAQmeasure();//Measurement from SGP30 + rslt = myBME680.bme680_get_sensor_data ( &data, &gas_sensor ); //Measurement for BME680 + ZMODtemp.write(ZMODTEMPaddr,wInit,2); //maybe? ZMODtemp.write(ZMODTEMPaddr,wTemp,1); ZMODtemp.read(ZMODTEMPaddr,rTemp,2); //Returns 2 bytes @@ -457,20 +475,22 @@ float SiTemp=((175.72*temp_code)/65536)-46.85; ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f,ic%d,iv%d,ir%d,gc%d,gv%d,br%d,bt%.2f,bh%.2f,bp%.2f,zi%f,zh%f,zc%f,st%.2f\n",0.00,flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read(),myiAQ_Core_data.pred, myiAQ_Core_data.Tvoc, myiAQ_Core_data.resistance, sgp30.eCO2,sgp30.TVOC, data.gas_resistance,( data.temperature/100.0f ), ( data.humidity / 1000.0f ), ( data.pressure / 100.0f ),0.00,0.00,0.00,SiTemp); //Results after 5 mins of ON rslt = myBME680.bme680_set_sensor_mode ( &gas_sensor ); //BME680 reset - wait(0.1); + difSum2+=(myArray[m]-avg2)*(myArray[m]-avg2); wait(0.1); } - var2=difSum2/4; + var2=difSum2/9; sigma2=sqrt(var2); if (sigma2<0.05) { // here we defined the end threshold to be 0.05, it can be changed later based on experiment results - for(int m=0; m<4; m++) { + for(int m=0; m<8; m++) { //ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f\n",getTemp(),flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read()); //chemical sensor myiAQ_Core.iAQ_Core_GetNewReading ( &myiAQ_Core_data ); //Measurement from iAQ-Core C wait(0.1); sgp30.IAQmeasure();//Measurement from SGP30 + rslt = myBME680.bme680_get_sensor_data ( &data, &gas_sensor ); //Measurement for BME680 + ZMODtemp.write(ZMODTEMPaddr,wInit,2); //maybe? ZMODtemp.write(ZMODTEMPaddr,wTemp,1); ZMODtemp.read(ZMODTEMPaddr,rTemp,2); //Returns 2 bytes @@ -478,19 +498,21 @@ float SiTemp=((175.72*temp_code)/65536)-46.85; ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f,ic%d,iv%d,ir%d,gc%d,gv%d,br%d,bt%.2f,bh%.2f,bp%.2f,zi%f,zh%f,zc%f,st%.2f\n",0.00,flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read(),myiAQ_Core_data.pred, myiAQ_Core_data.Tvoc, myiAQ_Core_data.resistance, sgp30.eCO2,sgp30.TVOC, data.gas_resistance,( data.temperature/100.0f ), ( data.humidity / 1000.0f ), ( data.pressure / 100.0f ),0.00,0.00,0.00,SiTemp); //Results after 5 mins of ON rslt = myBME680.bme680_set_sensor_mode ( &gas_sensor ); //BME680 reset - wait(0.1); + myArray[m]=myArray[m+1]; wait(0.1); } - myArray[4]=carbon(); + myArray[8]=carbon(); } else { sol=1; //Solenoid is OFF 1 //ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f\n",getTemp(),flow(), 100.00,s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read()); //chemical sensor myiAQ_Core.iAQ_Core_GetNewReading ( &myiAQ_Core_data ); //Measurement from iAQ-Core C wait(0.1); sgp30.IAQmeasure();//Measurement from SGP30 + rslt = myBME680.bme680_get_sensor_data ( &data, &gas_sensor ); //Measurement for BME680 + ZMODtemp.write(ZMODTEMPaddr,wInit,2); //maybe? ZMODtemp.write(ZMODTEMPaddr,wTemp,1); ZMODtemp.read(ZMODTEMPaddr,rTemp,2); //Returns 2 bytes @@ -498,9 +520,9 @@ float SiTemp=((175.72*temp_code)/65536)-46.85; ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f,ic%d,iv%d,ir%d,gc%d,gv%d,br%d,bt%.2f,bh%.2f,bp%.2f,zi%f,zh%f,zc%f,st%.2f\n",0.00,flow(), 0.00,s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read(),myiAQ_Core_data.pred, myiAQ_Core_data.Tvoc, myiAQ_Core_data.resistance, sgp30.eCO2,sgp30.TVOC, data.gas_resistance,( data.temperature/100.0f ), ( data.humidity / 1000.0f ), ( data.pressure / 100.0f ),0.00,0.00,0.00,SiTemp); //Results after 5 mins of ON rslt = myBME680.bme680_set_sensor_mode ( &gas_sensor ); //BME680 reset + wait(0.1); - flage=1; //breakes the loop } } @@ -509,7 +531,9 @@ myiAQ_Core.iAQ_Core_GetNewReading ( &myiAQ_Core_data ); //Measurement from iAQ-Core C wait(0.1); sgp30.IAQmeasure();//Measurement from SGP30 + rslt = myBME680.bme680_get_sensor_data ( &data, &gas_sensor ); //Measurement for BME680 + ZMODtemp.write(ZMODTEMPaddr,wInit,2); //maybe? ZMODtemp.write(ZMODTEMPaddr,wTemp,1); ZMODtemp.read(ZMODTEMPaddr,rTemp,2); //Returns 2 bytes @@ -517,8 +541,8 @@ float SiTemp=((175.72*temp_code)/65536)-46.85; ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f,ic%d,iv%d,ir%d,gc%d,gv%d,br%d,bt%.2f,bh%.2f,bp%.2f,zi%f,zh%f,zc%f,st%.2f\n",0.00,flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read(),myiAQ_Core_data.pred, myiAQ_Core_data.Tvoc, myiAQ_Core_data.resistance, sgp30.eCO2,sgp30.TVOC, data.gas_resistance,( data.temperature/100.0f ), ( data.humidity / 1000.0f ), ( data.pressure / 100.0f ),0.00,0.00,0.00,SiTemp); //Results after 5 mins of ON rslt = myBME680.bme680_set_sensor_mode ( &gas_sensor ); //BME680 reset - wait(0.1); -//led=0.4f; //LED is back to full brightness + + //led=0.4f; //LED is back to full brightness bf=0; //reset the detecting base flow flag fin=1; //enables the next section flag @@ -527,14 +551,16 @@ } if(carbon()<2.00 && fin ==1) { - //User has to wait for the CO2 level to drop less than 1% before testing again. - //Once it is less than 1%, all the flags and parameters used in calculations are reset + //User has to wait for the CO2 level to drop less than 2% before testing again. + //Once it is less than 2%, all the flags and parameters used in calculations are reset //ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f\n",getTemp(),flow(),carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read()); //chemical sensor myiAQ_Core.iAQ_Core_GetNewReading ( &myiAQ_Core_data ); //Measurement from iAQ-Core C wait(0.1); sgp30.IAQmeasure();//Measurement from SGP30 + rslt = myBME680.bme680_get_sensor_data ( &data, &gas_sensor ); //Measurement for BME680 + ZMODtemp.write(ZMODTEMPaddr,wInit,2); //maybe? ZMODtemp.write(ZMODTEMPaddr,wTemp,1); ZMODtemp.read(ZMODTEMPaddr,rTemp,2); //Returns 2 bytes @@ -542,7 +568,7 @@ float SiTemp=((175.72*temp_code)/65536)-46.85; ttl.printf("tt%.2f,ff%.2f,cc%.2f,sa%i,sb%i,sc%i,sd%i,se%i,sf%i,sg%i,sh%i,ti%.2f,ic%d,iv%d,ir%d,gc%d,gv%d,br%d,bt%.2f,bh%.2f,bp%.2f,zi%f,zh%f,zc%f,st%.2f\n",0.00,flow(), carbon(),s1(),s2(),s3(),s4(),s5(),s6(),s7(),s8(),stream.read(),myiAQ_Core_data.pred, myiAQ_Core_data.Tvoc, myiAQ_Core_data.resistance, sgp30.eCO2,sgp30.TVOC, data.gas_resistance,( data.temperature/100.0f ), ( data.humidity / 1000.0f ), ( data.pressure / 100.0f ),0.00,0.00,0.00,SiTemp); //Results after 5 mins of ON rslt = myBME680.bme680_set_sensor_mode ( &gas_sensor ); //BME680 reset - wait(0.1); + stream.reset(); stream.stop(); measurement_started =0;