SGP30 (used in POCBreath_V2_smd_commercial)

Dependencies:   Adafruit_SGP30_mbed mbed

main.cpp

Committer:
mehrnaz
Date:
2019-07-12
Revision:
2:ef98576cd67b
Parent:
1:08bbc3ecd836
Child:
3:3d51f8870e91

File content as of revision 2:ef98576cd67b:

#include "mbed.h"
#include "flow.h"

/////////////////////////
// In this version of the program developed for the Breath project, flow and CO2
// are measured in a separate .h file called: "flow.h" which is included in the
// main code. Data is streamed using a serial connection (TTL cable or Bluetooth)
// without any intruption because of loop calculations. 
// This version is especially suitable to be used for KST.
// Also, a solenoid would be turned on and off based on calculating the standard deviation in CO2 profile.
//
// Generated by: Mehrnaz Javadipour
////////////////////////// 

Serial ttl(PA_2,PA_3);  //TTL cable TX,RX
DigitalOut sol(PC_5);   //Solenoid: Digital Output

int main()
{
    ttl.baud(9600); //baudrate for the serial connection
    flow();         //calling flow from flow.h
    carbon();       //calling CO2 from flow.h
    int bf=0;
    int i=0;
    float bfArray[4];
    float sf=0;
    float fv=0;
    int myArray[9];
    int measurement_started=0;
    unsigned int sum=0;
    long double var=0.0;
    float sigma=0.0;
    int difSum=0;
    unsigned int sum2=0;
    long double var2=0.0;
    float sigma2=0.0;
    int difSum2=0;
     int avg2=0;
    int avg=0;
    int m=0;
    int flags=0;
    int flage=0;
    int solstart=0;
    int solend=0;
    int fin=0;
    
    //float CO_2;
    
    while(1)
    {
        //CO_2=(float)carbon()/10000;
        ttl.printf("%f,%f\n",flow(), carbon());
        if (bf==0)
            {
              for(i=0; i<4; i++) 
                  {
                    bfArray[i]=flow();  
                    sf+=bfArray[i];                  
                  }   
               fv=sf/4;
               fv=fv+0.2; 
               //ttl.printf("set\n");
               bf=1;
             }
        
        if ((flow()>fv) and (measurement_started ==0)) 
            {        
               // ttl.printf("ready to detect plateau \n");
                measurement_started = 1;
            }
        
        if ((measurement_started == 1) and (solstart==0)) 
            {
                //ttl.printf("starting...\n");
        
                for(m=0;m<9;m++)
                    {
                        ttl.printf("%f,%f\n",flow(), carbon());
                        myArray[m]=carbon();
                    }
                while(flags==0)
                    {
                        for(int m=0;m<9;m++)
                            { 
                            ttl.printf("%f,%f\n",flow(), carbon());
                            sum+=myArray[m]; 
                            }
                        avg=sum/9;
                        for(int m=0;m<9;m++)
                            {
                            ttl.printf("%f,%f\n",flow(), carbon()); 
                            difSum+=(myArray[m]-avg)*(myArray[m]-avg); //Find sum of difference between value X and mean
                            }
                            var=difSum/9;
                            sigma=sqrt(var);
                        if (sigma<0.02)
                            {
                             //ttl.printf("sol didnt turn on\n");
                            for(int m=0;m<8;m++)
                             {
                              ttl.printf("%f,%f\n",flow(), carbon());
                              myArray[m]=myArray[m+1];  //Shift all carbon to left by 1
                             }
                             myArray[8]=carbon();   
                            }else
                            {
                            ttl.printf("%f,%f\n",flow(), carbon());
                           // ttl.printf("sol on\n");
                            sol=1;
                            flags=1;
                            }
                     }
                solend=1;
                solstart =1;
            }
        if ((measurement_started == 1) and (solend==1)) 
        {
          // ttl.printf("ending...\n");
        
                for(m=0;m<9;m++)
                    {
                        ttl.printf("%f,%f\n",flow(), carbon());
                        myArray[m]=carbon();
                    }
                while(flage==0)
                    {
                        for(int m=0;m<9;m++)
                            { 
                            ttl.printf("%f,%f\n",flow(), carbon());
                            sum2+=myArray[m]; 
                            }
                        avg2=sum2/9;
                        for(int m=0;m<9;m++)
                            {
                            ttl.printf("%f,%f\n",flow(), carbon()); 
                            difSum2+=(myArray[m]-avg2)*(myArray[m]-avg2); //Find sum of difference between value X and mean
                            }
                            var2=difSum2/9;
                            sigma2=sqrt(var2);
                        if (sigma2<0.05)
                            {
                            // ttl.printf("sol didnt turn on\n");
                            for(int m=0;m<8;m++)
                             {
                              ttl.printf("%f,%f\n",flow(), carbon());
                              myArray[m]=myArray[m+1];  //Shift all carbon to left by 1
                             }
                             myArray[8]=carbon();   
                            }else
                            {
                            ttl.printf("%f,%f\n",flow(), carbon());
                         //   ttl.printf("sol off\n");
                            sol=0;
                            flage=1;
                            }
                     }
        solend =0;
        bf=0;
        fin=1;
        }
     if((carbon()<10000) and (fin ==1)) 
            {
                
                //ttl.printf("ready\n");
                measurement_started =0;
                solstart=0;
                sum=0;
                var=0.0;
                sigma=0.0;
                difSum=0;
                 sum2=0;
                var2=0.0;
                sigma2=0.0;
                difSum2=0;
                avg2=0;
                avg=0;
                flags=0;
                flage=0;
                fin=0;
            }
    }
}