Library to control a BMP180 sensor.

BMP180 sensor

BMP180.h

Committer:
Wosser1sProductions
Date:
2016-08-26
Revision:
0:373de0f4d5cd
Child:
1:608e890e88e7

File content as of revision 0:373de0f4d5cd:

/*
  @file BMP180.h
  @brief Barometric Pressure and Temperature Sensor BMP180 Breakout I2C Library
*/

#ifndef BMP180_H
#define BMP180_H

#include "mbed.h"

///  default address is 0xEF => (0x77<<1) ?
#define BMP180_I2C_ADDRESS  0xEF

// Oversampling settings
typedef enum {
    ULTRA_LOW_POWER       = 0, ///< 1 pressure sample  :  4.5 ms delay
    STANDARD              = 1, ///< 2 pressure samples :  7.5 ms delay
    HIGH_RESOLUTION       = 2, ///< 4 pressure samples : 13.5 ms delay
    ULTRA_HIGH_RESOLUTION = 3  ///< 8 pressure samples : 25.5 ms delay
} OverSamplingSetting;

/** BMP180 class.
 *  Read Pressure and temperature from the BMP180 Breakout I2C sensor
 *
 * Example:
 * @code
 * #include "mbed.h"
 * #include "BMP180.h"
 *
 * int main() {
 *     BMP180 bmp180(PIN_SDA, PIN_SCL);
 *     float pressure, temperature;
 *
 *     // bmp180.Initialize(); // no altitude compensation and normal oversampling
 *     bmp180.Initialize(64, BMP180_OSS_ULTRA_LOW_POWER); // 64m altitude compensation and low power oversampling
 *
 *     while(1) {
 *         if (bmp180.ReadData(&pressure, &temperature))
 *             printf("Pressure(hPa): %8.2f \t Temperature(C): %8.2f\n", pressure, temperature);
 *         wait(1);
 *     }
 * }
 * @endcode
 */
class BMP180 {
    public:
        /** Create a BMP180 instance
         * @param i2c object
         */
        BMP180(I2C& i2c);

        /** Initialization: set member values and read BMP180 calibration parameters
         * @param altitude (in meter)
         * @param overSamplingSetting
         * @returns
         *   1 on success,
         *   0 on error
         */
        int initialize(float altitude = 0.F, OverSamplingSetting oss = STANDARD);

        /** Read pressure and temperature from the BMP180.
         * @param pressure (hPa)
         * @param temperature (C)
         * @returns
         *   1 on success,
         *   0 on error
         */
        int ReadData(float& pTemperature, float& pPressure);

    protected:
        /** Perform temperature measurement
         *
         * @returns
         *   temperature (C)
         */
        int ReadRawTemperature(long* pUt);

        /** Perform pressure measurement
         *
         * @returns
         *   pressure (mbar)
         */
        int ReadRawPressure(long* pUp);

        /** Calculation of the temperature from the digital output
         */
        float TrueTemperature(long ut);

        /** Calculation of the pressure from the digital output
         */
        float TruePressure(long up);

        OverSamplingSetting m_oss;
        float m_altitude;

        I2C m_i2c;
        char m_data[2];

        short ac1, ac2, ac3, b1, b2, md;
        //short mb; // Not used?
        unsigned short ac4, ac5, ac6;
        long x1, x2, x3, b3, b5, b6, mc;
        unsigned long b4, b7;
};

#endif //BMP180_H