Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
BMP085.h@1:01aeefb5f4cf, 2017-08-25 (annotated)
- 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?
User | Revision | Line number | New 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 |