Demo program for the MPL3115A2 library.

Dependencies:   FOCOMETROPRESION mbed

Fork of WIGO_MPL3115A2 by clemente di caprio

main.cpp

Committer:
perezalvarezhi
Date:
2014-10-02
Revision:
8:c415332bdea7
Parent:
7:97f5edf7d270

File content as of revision 8:c415332bdea7:

#include "mbed.h"
#include "MPL3115A2.h"

#define MPL3115A2_I2C_ADDRESS (0x60<<1)
#define 
DigitalOut myled(LED1);
MPL3115A2 wigo_sensor1( PTC9, PTC8, MPL3115A2_I2C_ADDRESS);
Serial pc(USBTX, USBRX);

/* pos [0] = altimeter or pressure value */
/* pos [1] = temperature value */
float sensor_data[2];

void dataready( void);      // callback function for data streaming using Interrupt
void alttrigger( void);

/* Helper functions to print out as float the raw data */
float print_PressureValue( unsigned char *dt);
float print_AltimiterValue( unsigned char *dt);
float print_TemperatureValue( unsigned char *dt);

int main() {
    pc.baud(9600);
    pc.printf("MPL3115A2 Sensor. [%X]\r\n", wigo_sensor1.getDeviceID());
    // ***** Data acquisition using polling method and delta values
    // Array for the dela values
    //float delta[2];
    
    // Set over sampling value (see MPL3115A2.h for details)
    wigo_sensor1.Oversample_Ratio( OVERSAMPLE_RATIO_128);
    // Configure the sensor as Barometer.
    wigo_sensor1.Barometric_Mode();
    int i =0;
    while(1) {
        //
        if ( wigo_sensor1.getAllData( &sensor_data[0]) ) {
            pc.printf("\tPressure: %f\tTemperature: %f\r\n", sensor_data[0], sensor_data[1]);
            //pc.printf("\tDelatPress: %f\tDeltaTemp: %f\r\n", delta[0], delta[1]);
        }else{
            pc.printf("Not reading any more");
        }
        pc.printf("Measurement# %d",i);
        i++;
        //
        wait( 1.0);
    }

    
    
}

void dataready( void)
{
    wigo_sensor1.getAllData( &sensor_data[0]);
    pc.printf("\tPressure: %f\tTemperature: %f\r\n", sensor_data[0], sensor_data[1]);
}

float print_PressureValue( unsigned char *dt)
{
    unsigned int prs;
    float fprs;

    /*
    * dt[0] = Bits 12-19 of 20-bit real-time Pressure sample. (b7-b0)
    * dt[1] = Bits 4-11 of 20-bit real-time Pressure sample. (b7-b0)
    * dt[2] = Bits 0-3 of 20-bit real-time Pressure sample (b7-b4)
    */
    prs = (dt[0]<<10) | (dt[1]<<2) | (dt[2]>>6);
    //
    fprs = (float)prs * 1.0f;
    
    if ( dt[2] & 0x20)
        fprs += 0.25f;
    if ( dt[2] & 0x10)
        fprs += 0.5f;
    
    return fprs;
}

float print_AltimiterValue( unsigned char *dt)
{
    unsigned short altm;
    float faltm;

    /*
    * dt[0] = Bits 12-19 of 20-bit real-time Altitude sample. (b7-b0)
    * dt[1] = Bits 4-11 of 20-bit real-time Altitude sample. (b7-b0)
    * dt[2] = Bits 0-3 of 20-bit real-time Altitude sample (b7-b4)
    */    
    altm = (dt[0]<<8) | dt[1];
    //
    if ( dt[0] > 0x7F) {
        altm = ~altm + 1;
        faltm = (float)altm * -1.0f;
    } else {
        faltm = (float)altm * 1.0f;
    }
    //
    faltm = faltm+((float)(dt[2]>>4) * 0.0625f);
    return faltm;
}

float print_TemperatureValue( unsigned char *dt)
{
    unsigned short temp;
    float ftemp;
    
    /*
    * dt[0] = Bits 4-11 of 16-bit real-time temperature sample. (b7-b0)
    * dt[1] = Bits 0-3 of 16-bit real-time temperature sample. (b7-b4)
    */
    temp = dt[0];
    //
    if ( dt[0] > 0x7F) {
        temp = ~temp + 1;
        ftemp = (float)temp * -1.0f;
    } else {
        ftemp = (float)temp * 1.0f;
    }
    //
    ftemp = ftemp+((float)(dt[1]>>4) * 0.0625f);
    return ftemp;

}