Manuel Caballero / BMP085
Committer:
mcm
Date:
Fri Aug 25 13:30:28 2017 +0000
Revision:
1:01aeefb5f4cf
Parent:
0:9e768970b8b2
Child:
2:34a32898cd23
The library was completed, it needs to be tested.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 1:01aeefb5f4cf 1 /**
mcm 1:01aeefb5f4cf 2 * @brief BMP085.h
mcm 1:01aeefb5f4cf 3 * @details Digital pressure sensor.
mcm 1:01aeefb5f4cf 4 * Header file.
mcm 1:01aeefb5f4cf 5 *
mcm 1:01aeefb5f4cf 6 *
mcm 1:01aeefb5f4cf 7 * @return NA
mcm 1:01aeefb5f4cf 8 *
mcm 1:01aeefb5f4cf 9 * @author Manuel Caballero
mcm 1:01aeefb5f4cf 10 * @date 25/August/2017
mcm 1:01aeefb5f4cf 11 * @version 25/August/2017 The ORIGIN
mcm 1:01aeefb5f4cf 12 * @pre NaN.
mcm 1:01aeefb5f4cf 13 * @warning NaN
mcm 1:01aeefb5f4cf 14 * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ).
mcm 1:01aeefb5f4cf 15 */
mcm 1:01aeefb5f4cf 16 #ifndef BMP085_H
mcm 1:01aeefb5f4cf 17 #define BMP085_H
mcm 1:01aeefb5f4cf 18
mcm 1:01aeefb5f4cf 19 #include "mbed.h"
mcm 1:01aeefb5f4cf 20
mcm 1:01aeefb5f4cf 21
mcm 1:01aeefb5f4cf 22 /*!
mcm 1:01aeefb5f4cf 23 Library for the BMP085 Digital Pressure Sensor.
mcm 1:01aeefb5f4cf 24 */
mcm 1:01aeefb5f4cf 25 class BMP085
mcm 1:01aeefb5f4cf 26 {
mcm 1:01aeefb5f4cf 27 public:
mcm 1:01aeefb5f4cf 28 /**
mcm 1:01aeefb5f4cf 29 * @brief DEFAULT ADDRESSES
mcm 1:01aeefb5f4cf 30 */
mcm 1:01aeefb5f4cf 31 typedef enum {
mcm 1:01aeefb5f4cf 32 BMP085_ADDRESS = 0x77
mcm 1:01aeefb5f4cf 33 } BMP085_address_t;
mcm 1:01aeefb5f4cf 34
mcm 1:01aeefb5f4cf 35
mcm 1:01aeefb5f4cf 36 /**
mcm 1:01aeefb5f4cf 37 * @brief CALIBRATION COEFFICIENTS
mcm 1:01aeefb5f4cf 38 */
mcm 1:01aeefb5f4cf 39 #define BMP085_AC1_MSB 0xAA /*!< MSB AC1 coefficient */
mcm 1:01aeefb5f4cf 40 #define BMP085_AC1_LSB 0xAB /*!< LSB AC1 coefficient */
mcm 1:01aeefb5f4cf 41 #define BMP085_AC2_MSB 0xAC /*!< MSB AC2 coefficient */
mcm 1:01aeefb5f4cf 42 #define BMP085_AC2_LSB 0xAD /*!< LSB AC2 coefficient */
mcm 1:01aeefb5f4cf 43 #define BMP085_AC3_MSB 0xAE /*!< MSB AC3 coefficient */
mcm 1:01aeefb5f4cf 44 #define BMP085_AC3_LSB 0xAF /*!< LSB AC3 coefficient */
mcm 1:01aeefb5f4cf 45 #define BMP085_AC4_MSB 0xB0 /*!< MSB AC4 coefficient */
mcm 1:01aeefb5f4cf 46 #define BMP085_AC4_LSB 0xB1 /*!< LSB AC4 coefficient */
mcm 1:01aeefb5f4cf 47 #define BMP085_AC5_MSB 0xB2 /*!< MSB AC5 coefficient */
mcm 1:01aeefb5f4cf 48 #define BMP085_AC5_LSB 0xB3 /*!< LSB AC5 coefficient */
mcm 1:01aeefb5f4cf 49 #define BMP085_AC6_MSB 0xB4 /*!< MSB AC6 coefficient */
mcm 1:01aeefb5f4cf 50 #define BMP085_AC6_LSB 0xB5 /*!< LSB AC6 coefficient */
mcm 1:01aeefb5f4cf 51 #define BMP085_B1_MSB 0xB6 /*!< MSB B1 coefficient */
mcm 1:01aeefb5f4cf 52 #define BMP085_B1_LSB 0xB7 /*!< LSB B1 coefficient */
mcm 1:01aeefb5f4cf 53 #define BMP085_B2_MSB 0xB8 /*!< MSB B2 coefficient */
mcm 1:01aeefb5f4cf 54 #define BMP085_B2_LSB 0xB9 /*!< LSB B2 coefficient */
mcm 1:01aeefb5f4cf 55 #define BMP085_MB_MSB 0xBA /*!< MSB MB coefficient */
mcm 1:01aeefb5f4cf 56 #define BMP085_MB_LSB 0xBB /*!< LSB MB coefficient */
mcm 1:01aeefb5f4cf 57 #define BMP085_MC_MSB 0xBC /*!< MSB MC coefficient */
mcm 1:01aeefb5f4cf 58 #define BMP085_MC_LSB 0xBD /*!< LSB MC coefficient */
mcm 1:01aeefb5f4cf 59 #define BMP085_MD_MSB 0xBE /*!< MSB MD coefficient */
mcm 1:01aeefb5f4cf 60 #define BMP085_MD_LSB 0xBF /*!< LSB MD coefficient */
mcm 1:01aeefb5f4cf 61
mcm 1:01aeefb5f4cf 62
mcm 1:01aeefb5f4cf 63 /**
mcm 1:01aeefb5f4cf 64 * @brief REGISTERS MAP
mcm 1:01aeefb5f4cf 65 */
mcm 1:01aeefb5f4cf 66 #define BMP085_CONTROL 0xF4 /*!< Control register */
mcm 1:01aeefb5f4cf 67
mcm 1:01aeefb5f4cf 68
mcm 1:01aeefb5f4cf 69
mcm 1:01aeefb5f4cf 70 /* Commands Registers */
mcm 1:01aeefb5f4cf 71 /**
mcm 1:01aeefb5f4cf 72 * @brief TEMPERATURE
mcm 1:01aeefb5f4cf 73 */
mcm 1:01aeefb5f4cf 74 #define BMP085_TRIGGER_TEMPERATURE 0x2E /*!< Trigger a new Temperature measurement */
mcm 1:01aeefb5f4cf 75 #define BMP085_READ_TEMPERATURE 0xF6 /*!< Read Temperature */
mcm 1:01aeefb5f4cf 76
mcm 1:01aeefb5f4cf 77 /* Commands Registers */
mcm 1:01aeefb5f4cf 78 /**
mcm 1:01aeefb5f4cf 79 * @brief PRESSURE
mcm 1:01aeefb5f4cf 80 */
mcm 1:01aeefb5f4cf 81 #define BMP085_TRIGGER_PRESSURE 0x34 /*!< Trigger a new Pressure measurement */
mcm 1:01aeefb5f4cf 82 #define BMP085_READ_PRESSURE 0xF6 /*!< Read Pressure */
mcm 1:01aeefb5f4cf 83
mcm 1:01aeefb5f4cf 84 typedef enum {
mcm 1:01aeefb5f4cf 85 PRESSURE_ULTRA_LOW_POWER_MODE = 0, /*!< Pressure: Ultra low power mode. */
mcm 1:01aeefb5f4cf 86 PRESSURE_STANDARD_MODE = 1, /*!< Pressure: Standard mode. */
mcm 1:01aeefb5f4cf 87 PRESSURE_HIGH_RESOLUTION_MODE = 2, /*!< Pressure: High resolution mode. */
mcm 1:01aeefb5f4cf 88 PRESSURE_ULTRA_HIGH_RES_MODE = 3 /*!< Pressure: Ultra high resolution mode. */
mcm 1:01aeefb5f4cf 89 } BMP085_pressure_osrs_t;
mcm 1:01aeefb5f4cf 90
mcm 1:01aeefb5f4cf 91
mcm 1:01aeefb5f4cf 92
mcm 1:01aeefb5f4cf 93
mcm 1:01aeefb5f4cf 94 #ifndef VECTOR_STRUCT_H
mcm 1:01aeefb5f4cf 95 #define VECTOR_STRUCT_H
mcm 1:01aeefb5f4cf 96 typedef struct {
mcm 1:01aeefb5f4cf 97 int16_t AC1;
mcm 1:01aeefb5f4cf 98 int16_t AC2;
mcm 1:01aeefb5f4cf 99 int16_t AC3;
mcm 1:01aeefb5f4cf 100 uint16_t AC4;
mcm 1:01aeefb5f4cf 101 uint16_t AC5;
mcm 1:01aeefb5f4cf 102 uint16_t AC6;
mcm 1:01aeefb5f4cf 103 int16_t B1;
mcm 1:01aeefb5f4cf 104 int16_t B2;
mcm 1:01aeefb5f4cf 105 int16_t MB;
mcm 1:01aeefb5f4cf 106 int16_t MC;
mcm 1:01aeefb5f4cf 107 int16_t MD;
mcm 1:01aeefb5f4cf 108 } Vector_cal_coeff_t;
mcm 1:01aeefb5f4cf 109
mcm 1:01aeefb5f4cf 110
mcm 1:01aeefb5f4cf 111 typedef struct {
mcm 1:01aeefb5f4cf 112 int16_t UT_Temperature;
mcm 1:01aeefb5f4cf 113 } Vector_temp_f;
mcm 1:01aeefb5f4cf 114
mcm 1:01aeefb5f4cf 115 typedef struct {
mcm 1:01aeefb5f4cf 116 int32_t UP_Pressure;
mcm 1:01aeefb5f4cf 117 } Vector_pressure_f;
mcm 1:01aeefb5f4cf 118
mcm 1:01aeefb5f4cf 119 typedef struct {
mcm 1:01aeefb5f4cf 120 int16_t Temperature;
mcm 1:01aeefb5f4cf 121 int32_t Pressure;
mcm 1:01aeefb5f4cf 122 } Vector_compensated_data_f;
mcm 1:01aeefb5f4cf 123 #endif
mcm 1:01aeefb5f4cf 124
mcm 1:01aeefb5f4cf 125
mcm 1:01aeefb5f4cf 126 /**
mcm 1:01aeefb5f4cf 127 * @brief INTERNAL CONSTANTS
mcm 1:01aeefb5f4cf 128 */
mcm 1:01aeefb5f4cf 129 typedef enum {
mcm 1:01aeefb5f4cf 130 BMP085_SUCCESS = 0,
mcm 1:01aeefb5f4cf 131 BMP085_FAILURE = 1,
mcm 1:01aeefb5f4cf 132 I2C_SUCCESS = 0 /*!< I2C communication was fine */
mcm 1:01aeefb5f4cf 133 } BMP085_status_t;
mcm 1:01aeefb5f4cf 134
mcm 1:01aeefb5f4cf 135
mcm 1:01aeefb5f4cf 136
mcm 1:01aeefb5f4cf 137
mcm 1:01aeefb5f4cf 138 /** Create an BMP085 object connected to the specified I2C pins.
mcm 1:01aeefb5f4cf 139 *
mcm 1:01aeefb5f4cf 140 * @param sda I2C data pin
mcm 1:01aeefb5f4cf 141 * @param scl I2C clock pin
mcm 1:01aeefb5f4cf 142 * @param addr I2C slave address
mcm 1:01aeefb5f4cf 143 * @param freq I2C frequency in Hz.
mcm 1:01aeefb5f4cf 144 */
mcm 1:01aeefb5f4cf 145 BMP085 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq );
mcm 1:01aeefb5f4cf 146
mcm 1:01aeefb5f4cf 147 /** Delete BMP085 object.
mcm 1:01aeefb5f4cf 148 */
mcm 1:01aeefb5f4cf 149 ~BMP085();
mcm 1:01aeefb5f4cf 150
mcm 1:01aeefb5f4cf 151 /** It gets the calibration coefficients.
mcm 1:01aeefb5f4cf 152 */
mcm 1:01aeefb5f4cf 153 BMP085_status_t BMP085_GetCalibrationCoefficients ( Vector_cal_coeff_t* myCalCoeff );
mcm 1:01aeefb5f4cf 154
mcm 1:01aeefb5f4cf 155 /** It triggers a new temperature mesurement.
mcm 1:01aeefb5f4cf 156 */
mcm 1:01aeefb5f4cf 157 BMP085_status_t BMP085_TriggerTemperature ( void );
mcm 1:01aeefb5f4cf 158
mcm 1:01aeefb5f4cf 159 /** It reads the raw temperature value.
mcm 1:01aeefb5f4cf 160 */
mcm 1:01aeefb5f4cf 161 BMP085_status_t BMP085_ReadRawTemperature ( Vector_temp_f* myRawTemperature );
mcm 1:01aeefb5f4cf 162
mcm 1:01aeefb5f4cf 163 /** It reads the compensated/true temperature. NOT RECOMMENDED, use BMP085_CalculateCompensated_Temperature_Pressure instead!
mcm 1:01aeefb5f4cf 164 */
mcm 1:01aeefb5f4cf 165 BMP085_status_t BMP085_ReadCompensatedTemperature ( Vector_temp_f* myTrueTemperature, Vector_cal_coeff_t myCalCoeff );
mcm 1:01aeefb5f4cf 166
mcm 1:01aeefb5f4cf 167 /** It triggers a new pressure mesurement.
mcm 1:01aeefb5f4cf 168 */
mcm 1:01aeefb5f4cf 169 BMP085_status_t BMP085_TriggerPressure ( BMP085_pressure_osrs_t myResolution );
mcm 1:01aeefb5f4cf 170
mcm 1:01aeefb5f4cf 171 /** It reads the raw pressure value.
mcm 1:01aeefb5f4cf 172 */
mcm 1:01aeefb5f4cf 173 BMP085_status_t BMP085_ReadRawPressure ( Vector_pressure_f* myRawPressure );
mcm 1:01aeefb5f4cf 174
mcm 1:01aeefb5f4cf 175 /** It calculates the compensated/true temperature and pressure values.
mcm 1:01aeefb5f4cf 176 */
mcm 1:01aeefb5f4cf 177 Vector_compensated_data_f BMP085_CalculateCompensated_Temperature_Pressure ( Vector_cal_coeff_t myCalCoeff, Vector_temp_f myRawTemperature, Vector_pressure_f myRawPressure,
mcm 1:01aeefb5f4cf 178 BMP085_pressure_osrs_t myResolution );
mcm 1:01aeefb5f4cf 179
mcm 1:01aeefb5f4cf 180 private:
mcm 1:01aeefb5f4cf 181 I2C i2c;
mcm 1:01aeefb5f4cf 182 uint32_t BMP085_Addr;
mcm 1:01aeefb5f4cf 183 };
mcm 1:01aeefb5f4cf 184
mcm 1:01aeefb5f4cf 185 #endif