POC Breath using SMD commercial sensors
Dependencies: iAQ_Core Adafruit_SGP30_mbed mbed BME680
Diff: main.cpp
- Revision:
- 9:81d1b4833516
- Parent:
- 8:976c405a1da5
- Child:
- 10:aad246b57873
--- a/main.cpp Sun Jun 14 15:01:59 2020 +0000 +++ b/main.cpp Sun Jun 14 15:13:58 2020 +0000 @@ -232,9 +232,9 @@ int solstart=0; //FLAG for starting calculations for detecting plateau int m=0; - 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 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 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 @@ -295,7 +295,7 @@ //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<9; m++) { + for(m=0; m<4; 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); @@ -315,7 +315,7 @@ } while(flags==0) { //While "flags" is enabled, keeps calculating the standard deviation. - for(int m=0; m<9; m++) { + for(int m=0; m<4; 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); @@ -333,8 +333,8 @@ wait(0.1); } - avg=sum/9; - for(int m=0; m<9; m++) { + avg=sum/4; + for(int m=0; m<4; 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); @@ -351,14 +351,14 @@ difSum+=(myArray[m]-avg)*(myArray[m]-avg); //Find sum of difference between value X and mean wait(0.1); } - var=difSum/9; + var=difSum/4; 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<8; m++) { + for(int m=0; m<4; 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); @@ -376,7 +376,7 @@ wait(0.1); } - myArray[8]=carbon(); //assign a new value for the 9th sample + myArray[4]=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 @@ -408,7 +408,7 @@ if ((measurement_started == 1) and (solend==1)) { // same process happens for finishing the plateau: - for(m=0; m<9; m++) { + for(m=0; m<4; 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); @@ -426,7 +426,7 @@ wait(0.1); } while(flage==0) { - for(int m=0; m<9; m++) { + for(int m=0; m<4; 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); @@ -443,8 +443,8 @@ sum2+=myArray[m]; wait(0.1); } - avg2=sum2/9; - for(int m=0; m<9; m++) { + avg2=sum2/4; + for(int m=0; m<4; 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); @@ -461,11 +461,11 @@ difSum2+=(myArray[m]-avg2)*(myArray[m]-avg2); wait(0.1); } - var2=difSum2/9; + var2=difSum2/4; 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<8; m++) { + for(int m=0; m<4; 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); @@ -483,7 +483,7 @@ wait(0.1); } - myArray[8]=carbon(); + myArray[4]=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