para el ventilador

Dependencies:   QEI FastPWM

pressure_sensors.cpp

Committer:
miguelangel_2511
Date:
2020-04-23
Revision:
8:208d965a3bd2
Parent:
7:f4e248182d31
Child:
9:95fdcdc0977e

File content as of revision 8:208d965a3bd2:


#include "mbed.h"
#include "stdint.h"
#include "math.h"
#include "project_defines.h"
#include "pressure_sensors.h"


/* Object definition */
I2C pressure_sensor_01(PRESSURE_SENSOR_01_SDA_PIN, PRESSURE_SENSOR_01_SCL_PIN);
I2C pressure_sensor_02(PRESSURE_SENSOR_02_SDA_PIN, PRESSURE_SENSOR_02_SCL_PIN);

/* Global variable definition */
int16_t pressure_01_bin, pressure_02_bin;
float pressure_01_psi, pressure_02_psi;
float flow_lpm, volume_ml;

//float diff_pressure_psi;

char sensor_read_data_buffer[2];

/* Function definition */

void Pressure_Sensors_Initialize(void){
    pressure_sensor_01.frequency(PRESSURE_SENSOR_I2C_CLK_HZ ); 
    pressure_sensor_02.frequency(PRESSURE_SENSOR_I2C_CLK_HZ );
}


void Pressure_Sensors_Read(void){
    
    /* Read binary values */
    pressure_sensor_01.read(PRESSURE_SENSOR_01_SRA, sensor_read_data_buffer, 2);
    pressure_01_bin = ((sensor_read_data_buffer[0] << 8) | sensor_read_data_buffer[1]) & 0x3FFF;
    pressure_sensor_02.read(PRESSURE_SENSOR_02_SRA, sensor_read_data_buffer, 2);
    pressure_02_bin = ((sensor_read_data_buffer[0] << 8) | sensor_read_data_buffer[1]) & 0x3FFF;
    
    /* Calculate pressure values in PSI */
    pressure_01_psi = (5.0 * pressure_01_bin) / 16383; 
    pressure_02_psi = (5.0 * pressure_02_bin) / 16383;

    
} 

void Calculate_Flow_From_Pressure(void){
    
    int16_t diff_pressure_bin;
    float diff_pressure_psi;
    
    diff_pressure_bin =  pressure_02_bin - pressure_01_bin;
    diff_pressure_psi = (5.0 * diff_pressure_bin) / 16383;
    
    if(diff_pressure_psi < 0){
        flow_lpm = -SPIROMETER_SENSOR_CONSTANT * sqrt(-diff_pressure_psi);    
    }else{
        flow_lpm = SPIROMETER_SENSOR_CONSTANT * sqrt(diff_pressure_psi);  
    }    
}

void Calculate_Volume_From_Flow(void){
    
    static float previous_flow_lpm = 0.0;
    float delta_volume_ml;
    
    delta_volume_ml = (PRESSURE_SENSOR_READ_PERIOD_MS * (flow_lpm + previous_flow_lpm)) / 60.0;
    
    volume_ml = volume_ml + delta_volume_ml;
    
    previous_flow_lpm = flow_lpm;
    
}

void Pressure_01_LPF(void){

}


void Pressure_02_LPF(void){

}