a
Dependents: Skipper_operation gy-91_tset Autoflight2022_913
Fork of BMP280 by
BMP280.h@9:315c0737f4bc, 2019-08-25 (annotated)
- Committer:
- Skykon
- Date:
- Sun Aug 25 08:36:14 2019 +0000
- Revision:
- 9:315c0737f4bc
- Parent:
- 8:2dc7ede4ac55
a
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MACRUM | 1:763a4018aaec | 1 | /** |
MACRUM | 1:763a4018aaec | 2 | * BME280 Combined humidity and pressure sensor library |
MACRUM | 1:763a4018aaec | 3 | * |
MACRUM | 1:763a4018aaec | 4 | * @author Toyomasa Watarai |
MACRUM | 1:763a4018aaec | 5 | * @version 1.0 |
MACRUM | 1:763a4018aaec | 6 | * @date 06-April-2015 |
MACRUM | 1:763a4018aaec | 7 | * |
MACRUM | 1:763a4018aaec | 8 | * Library for "BME280 temperature, humidity and pressure sensor module" from Switch Science |
MACRUM | 1:763a4018aaec | 9 | * https://www.switch-science.com/catalog/2236/ |
MACRUM | 1:763a4018aaec | 10 | * |
MACRUM | 1:763a4018aaec | 11 | * For more information about the BME280: |
takafuminaka | 4:ddcaa259e65b | 12 | * http://ae-bst.resource.bosch.com/media/products/dokumente/bme280/BST-BME280_DS001-10.pdf |
MACRUM | 1:763a4018aaec | 13 | */ |
MACRUM | 1:763a4018aaec | 14 | |
12104404 | 5:7139d5accbc3 | 15 | #ifndef MBED_BMP280_H |
12104404 | 5:7139d5accbc3 | 16 | #define MBED_BMP280_H |
MACRUM | 0:ade9be832910 | 17 | |
MACRUM | 0:ade9be832910 | 18 | #include "mbed.h" |
MACRUM | 0:ade9be832910 | 19 | |
TUATBM | 8:2dc7ede4ac55 | 20 | //#define DEFAULT_SLAVE_ADDRESS (0x77) |
TUATBM | 8:2dc7ede4ac55 | 21 | #define DEFAULT_SLAVE_ADDRESS (0x76) |
TUATBM | 8:2dc7ede4ac55 | 22 | |
MACRUM | 0:ade9be832910 | 23 | //#define _DEBUG |
MACRUM | 0:ade9be832910 | 24 | #ifdef _DEBUG |
MACRUM | 0:ade9be832910 | 25 | extern Serial pc; |
MACRUM | 0:ade9be832910 | 26 | #define DEBUG_PRINT(...) pc.printf(__VA_ARGS__) |
MACRUM | 0:ade9be832910 | 27 | #else |
MACRUM | 0:ade9be832910 | 28 | #define DEBUG_PRINT(...) |
MACRUM | 0:ade9be832910 | 29 | #endif |
MACRUM | 0:ade9be832910 | 30 | |
TUATBM | 8:2dc7ede4ac55 | 31 | |
MACRUM | 0:ade9be832910 | 32 | /** BME280 class |
MACRUM | 0:ade9be832910 | 33 | * |
MACRUM | 0:ade9be832910 | 34 | * BME280: A library to correct environmental data using Boshe BME280 device |
MACRUM | 0:ade9be832910 | 35 | * |
MACRUM | 0:ade9be832910 | 36 | * BME280 is an environmental sensor |
MACRUM | 0:ade9be832910 | 37 | * @endcode |
MACRUM | 0:ade9be832910 | 38 | */ |
MACRUM | 0:ade9be832910 | 39 | |
12104404 | 7:c72b726c7dc9 | 40 | class BMP280 |
MACRUM | 0:ade9be832910 | 41 | { |
MACRUM | 0:ade9be832910 | 42 | public: |
TUATBM | 8:2dc7ede4ac55 | 43 | enum OptionPowerMode{ |
TUATBM | 8:2dc7ede4ac55 | 44 | SLEEP = 0, |
TUATBM | 8:2dc7ede4ac55 | 45 | FORCED, |
TUATBM | 8:2dc7ede4ac55 | 46 | NOMAL = 3 |
TUATBM | 8:2dc7ede4ac55 | 47 | }; |
TUATBM | 8:2dc7ede4ac55 | 48 | enum OptionOverSampling{ |
TUATBM | 8:2dc7ede4ac55 | 49 | OS_SKIPPED = 0, |
TUATBM | 8:2dc7ede4ac55 | 50 | OS_X1, |
TUATBM | 8:2dc7ede4ac55 | 51 | OS_X2, |
TUATBM | 8:2dc7ede4ac55 | 52 | OS_X4, |
TUATBM | 8:2dc7ede4ac55 | 53 | OS_X8, |
TUATBM | 8:2dc7ede4ac55 | 54 | OS_X16 |
TUATBM | 8:2dc7ede4ac55 | 55 | }; |
TUATBM | 8:2dc7ede4ac55 | 56 | enum OptionPressFilter{ |
TUATBM | 8:2dc7ede4ac55 | 57 | PF_OFF = 0, |
TUATBM | 8:2dc7ede4ac55 | 58 | PF_X2, |
TUATBM | 8:2dc7ede4ac55 | 59 | PF_X4, |
TUATBM | 8:2dc7ede4ac55 | 60 | PF_X8, |
TUATBM | 8:2dc7ede4ac55 | 61 | PF_X16 |
TUATBM | 8:2dc7ede4ac55 | 62 | }; |
TUATBM | 8:2dc7ede4ac55 | 63 | enum OptionStandByTime{ |
TUATBM | 8:2dc7ede4ac55 | 64 | SBT_0_5MS = 0, |
TUATBM | 8:2dc7ede4ac55 | 65 | SBT_62_5MS, |
TUATBM | 8:2dc7ede4ac55 | 66 | SBT_125MS, |
TUATBM | 8:2dc7ede4ac55 | 67 | SBT_250MS, |
TUATBM | 8:2dc7ede4ac55 | 68 | SBT_500MS, |
TUATBM | 8:2dc7ede4ac55 | 69 | SBT_1000MS, |
TUATBM | 8:2dc7ede4ac55 | 70 | SBT_2000MS, |
TUATBM | 8:2dc7ede4ac55 | 71 | SBT_4000MS |
TUATBM | 8:2dc7ede4ac55 | 72 | }; |
TUATBM | 8:2dc7ede4ac55 | 73 | enum FilterSelection{ |
TUATBM | 8:2dc7ede4ac55 | 74 | HANDHELD_DEVICE_LOW_POWER, |
TUATBM | 8:2dc7ede4ac55 | 75 | HANDHELD_DEVICE_DYNAMIC, |
TUATBM | 8:2dc7ede4ac55 | 76 | WETHER_MONITORING, |
TUATBM | 8:2dc7ede4ac55 | 77 | FLOOR_CHANGE_DETECTION, |
TUATBM | 8:2dc7ede4ac55 | 78 | DROP_DETECTION, |
TUATBM | 8:2dc7ede4ac55 | 79 | INDOOR_NAVIGATION |
TUATBM | 8:2dc7ede4ac55 | 80 | }; |
MACRUM | 0:ade9be832910 | 81 | |
MACRUM | 0:ade9be832910 | 82 | /** Create a BME280 instance |
MACRUM | 0:ade9be832910 | 83 | * which is connected to specified I2C pins with specified address |
MACRUM | 0:ade9be832910 | 84 | * |
MACRUM | 0:ade9be832910 | 85 | * @param sda I2C-bus SDA pin |
MACRUM | 0:ade9be832910 | 86 | * @param scl I2C-bus SCL pin |
MACRUM | 0:ade9be832910 | 87 | * @param slave_adr (option) I2C-bus address (default: 0x76) |
MACRUM | 0:ade9be832910 | 88 | */ |
12104404 | 7:c72b726c7dc9 | 89 | BMP280(PinName sda, PinName sck, char slave_adr = DEFAULT_SLAVE_ADDRESS); |
MACRUM | 0:ade9be832910 | 90 | |
MACRUM | 0:ade9be832910 | 91 | /** Create a BME280 instance |
MACRUM | 0:ade9be832910 | 92 | * which is connected to specified I2C pins with specified address |
MACRUM | 0:ade9be832910 | 93 | * |
MACRUM | 0:ade9be832910 | 94 | * @param i2c_obj I2C object (instance) |
MACRUM | 0:ade9be832910 | 95 | * @param slave_adr (option) I2C-bus address (default: 0x76) |
MACRUM | 0:ade9be832910 | 96 | */ |
12104404 | 7:c72b726c7dc9 | 97 | BMP280(I2C &i2c_obj, char slave_adr = DEFAULT_SLAVE_ADDRESS); |
MACRUM | 0:ade9be832910 | 98 | |
MACRUM | 0:ade9be832910 | 99 | /** Destructor of BME280 |
MACRUM | 0:ade9be832910 | 100 | */ |
12104404 | 7:c72b726c7dc9 | 101 | virtual ~BMP280(); |
MACRUM | 0:ade9be832910 | 102 | |
MACRUM | 0:ade9be832910 | 103 | /** Initializa BME280 sensor |
MACRUM | 0:ade9be832910 | 104 | * |
MACRUM | 0:ade9be832910 | 105 | * Configure sensor setting and read parameters for calibration |
MACRUM | 0:ade9be832910 | 106 | * |
MACRUM | 0:ade9be832910 | 107 | */ |
MACRUM | 0:ade9be832910 | 108 | void initialize(void); |
TUATBM | 8:2dc7ede4ac55 | 109 | void initialize(FilterSelection filter); |
TUATBM | 8:2dc7ede4ac55 | 110 | void initialize(OptionPowerMode opPM, |
TUATBM | 8:2dc7ede4ac55 | 111 | OptionOverSampling opPOS, |
TUATBM | 8:2dc7ede4ac55 | 112 | OptionOverSampling opTOS, |
TUATBM | 8:2dc7ede4ac55 | 113 | OptionPressFilter opPF, |
TUATBM | 8:2dc7ede4ac55 | 114 | OptionStandByTime opSBT, |
TUATBM | 8:2dc7ede4ac55 | 115 | float putPutRate); |
MACRUM | 0:ade9be832910 | 116 | |
MACRUM | 0:ade9be832910 | 117 | /** Read the current temperature value (degree Celsius) from BME280 sensor |
MACRUM | 0:ade9be832910 | 118 | * |
MACRUM | 0:ade9be832910 | 119 | */ |
MACRUM | 0:ade9be832910 | 120 | float getTemperature(void); |
MACRUM | 0:ade9be832910 | 121 | |
MACRUM | 0:ade9be832910 | 122 | /** Read the current pressure value (hectopascal)from BME280 sensor |
MACRUM | 0:ade9be832910 | 123 | * |
MACRUM | 0:ade9be832910 | 124 | */ |
TUATBM | 8:2dc7ede4ac55 | 125 | float getPressure(bool skipMeasureTemp = false); |
MACRUM | 0:ade9be832910 | 126 | |
MACRUM | 0:ade9be832910 | 127 | /** Read the current humidity value (humidity %) from BME280 sensor |
MACRUM | 0:ade9be832910 | 128 | * |
MACRUM | 0:ade9be832910 | 129 | */ |
12104404 | 6:d03826fe1062 | 130 | // float getHumidity(void); |
MACRUM | 0:ade9be832910 | 131 | |
TUATBM | 8:2dc7ede4ac55 | 132 | char getID(); |
TUATBM | 8:2dc7ede4ac55 | 133 | |
TUATBM | 8:2dc7ede4ac55 | 134 | float getSampleRate(); |
TUATBM | 8:2dc7ede4ac55 | 135 | |
TUATBM | 8:2dc7ede4ac55 | 136 | float getCycle_s(); |
TUATBM | 8:2dc7ede4ac55 | 137 | float getCycle_ms(); |
TUATBM | 8:2dc7ede4ac55 | 138 | float getCycle_us(); |
TUATBM | 8:2dc7ede4ac55 | 139 | |
TUATBM | 8:2dc7ede4ac55 | 140 | void setPowerMode(OptionPowerMode op); |
TUATBM | 8:2dc7ede4ac55 | 141 | void setPressOverSampling(OptionOverSampling op); |
TUATBM | 8:2dc7ede4ac55 | 142 | void setTempOverSampling(OptionOverSampling op); |
TUATBM | 8:2dc7ede4ac55 | 143 | void setPressFilter(OptionPressFilter op); |
TUATBM | 8:2dc7ede4ac55 | 144 | void setStandByTime(OptionStandByTime op); |
TUATBM | 8:2dc7ede4ac55 | 145 | |
TUATBM | 8:2dc7ede4ac55 | 146 | void selectFilter(FilterSelection filter); |
TUATBM | 8:2dc7ede4ac55 | 147 | |
TUATBM | 8:2dc7ede4ac55 | 148 | void enableSPI3WriteMode(bool enable); |
Skykon | 9:315c0737f4bc | 149 | //void enableSPI3WriteMode(bool disable); |
Skykon | 9:315c0737f4bc | 150 | |
TUATBM | 8:2dc7ede4ac55 | 151 | void resetSettings(); |
TUATBM | 8:2dc7ede4ac55 | 152 | bool whoAmI(); |
TUATBM | 8:2dc7ede4ac55 | 153 | |
TUATBM | 8:2dc7ede4ac55 | 154 | |
MACRUM | 0:ade9be832910 | 155 | private: |
MACRUM | 0:ade9be832910 | 156 | |
MACRUM | 0:ade9be832910 | 157 | I2C *i2c_p; |
MACRUM | 0:ade9be832910 | 158 | I2C &i2c; |
MACRUM | 0:ade9be832910 | 159 | char address; |
MACRUM | 0:ade9be832910 | 160 | uint16_t dig_T1; |
MACRUM | 0:ade9be832910 | 161 | int16_t dig_T2, dig_T3; |
MACRUM | 0:ade9be832910 | 162 | uint16_t dig_P1; |
MACRUM | 0:ade9be832910 | 163 | int16_t dig_P2, dig_P3, dig_P4, dig_P5, dig_P6, dig_P7, dig_P8, dig_P9; |
MACRUM | 0:ade9be832910 | 164 | uint16_t dig_H1, dig_H3; |
MACRUM | 0:ade9be832910 | 165 | int16_t dig_H2, dig_H4, dig_H5, dig_H6; |
MACRUM | 0:ade9be832910 | 166 | int32_t t_fine; |
MACRUM | 0:ade9be832910 | 167 | |
TUATBM | 8:2dc7ede4ac55 | 168 | char pressOverSampling; //0,1,2,4,8,16 |
TUATBM | 8:2dc7ede4ac55 | 169 | char tempOverSampling; //0,1,2,4,8,16 |
TUATBM | 8:2dc7ede4ac55 | 170 | char powerMode; //sleep,forced,nomal |
TUATBM | 8:2dc7ede4ac55 | 171 | char standByTime; //0.5,62.5,125,250,500,1000,2000,4000 [ms] |
TUATBM | 8:2dc7ede4ac55 | 172 | char pressFilter; //off,2,4,8,16 |
TUATBM | 8:2dc7ede4ac55 | 173 | bool SPI3WriteMode; //off,on |
Skykon | 9:315c0737f4bc | 174 | |
TUATBM | 8:2dc7ede4ac55 | 175 | float sampleTime; |
TUATBM | 8:2dc7ede4ac55 | 176 | float sampleRate; |
TUATBM | 8:2dc7ede4ac55 | 177 | |
TUATBM | 8:2dc7ede4ac55 | 178 | void reset(); |
TUATBM | 8:2dc7ede4ac55 | 179 | char ctrl_meas(); |
TUATBM | 8:2dc7ede4ac55 | 180 | char config(); |
TUATBM | 8:2dc7ede4ac55 | 181 | |
TUATBM | 8:2dc7ede4ac55 | 182 | void setSetters(OptionPowerMode opPM, |
TUATBM | 8:2dc7ede4ac55 | 183 | OptionOverSampling opPOS, |
TUATBM | 8:2dc7ede4ac55 | 184 | OptionOverSampling opTOS, |
TUATBM | 8:2dc7ede4ac55 | 185 | OptionPressFilter opPF, |
TUATBM | 8:2dc7ede4ac55 | 186 | OptionStandByTime opSBT, |
TUATBM | 8:2dc7ede4ac55 | 187 | float sampleRate); |
TUATBM | 8:2dc7ede4ac55 | 188 | void setOutputDataRate(float Hz); |
MACRUM | 0:ade9be832910 | 189 | }; |
MACRUM | 0:ade9be832910 | 190 | |
TUATBM | 8:2dc7ede4ac55 | 191 | inline float BMP280::getSampleRate(){return sampleRate;} |
TUATBM | 8:2dc7ede4ac55 | 192 | |
TUATBM | 8:2dc7ede4ac55 | 193 | inline float BMP280::getCycle_s(){return sampleTime*0.001;} |
TUATBM | 8:2dc7ede4ac55 | 194 | inline float BMP280::getCycle_ms(){return sampleTime;} |
TUATBM | 8:2dc7ede4ac55 | 195 | inline float BMP280::getCycle_us(){return sampleTime*1000;} |
TUATBM | 8:2dc7ede4ac55 | 196 | |
TUATBM | 8:2dc7ede4ac55 | 197 | inline void BMP280::setPressOverSampling(OptionOverSampling op){pressOverSampling = static_cast<char>(op);} |
TUATBM | 8:2dc7ede4ac55 | 198 | inline void BMP280::setTempOverSampling(OptionOverSampling op){tempOverSampling = static_cast<char>(op);} |
TUATBM | 8:2dc7ede4ac55 | 199 | inline void BMP280::setPowerMode(OptionPowerMode op){powerMode = static_cast<char>(op);} |
TUATBM | 8:2dc7ede4ac55 | 200 | inline void BMP280::setStandByTime(OptionStandByTime op){standByTime = static_cast<char>(op);} |
TUATBM | 8:2dc7ede4ac55 | 201 | inline void BMP280::setPressFilter(OptionPressFilter op){pressFilter = static_cast<char>(op);} |
Skykon | 9:315c0737f4bc | 202 | |
TUATBM | 8:2dc7ede4ac55 | 203 | inline void BMP280::enableSPI3WriteMode(bool enable){SPI3WriteMode = enable;} |
Skykon | 9:315c0737f4bc | 204 | //inline void BMP280::enableSPI3WriteMode(bool disable){SPI3WriteMode = disable;} |
TUATBM | 8:2dc7ede4ac55 | 205 | |
TUATBM | 8:2dc7ede4ac55 | 206 | inline char BMP280::ctrl_meas() |
TUATBM | 8:2dc7ede4ac55 | 207 | { |
TUATBM | 8:2dc7ede4ac55 | 208 | return ((tempOverSampling << 5) | (pressOverSampling << 2) | powerMode); |
TUATBM | 8:2dc7ede4ac55 | 209 | } |
TUATBM | 8:2dc7ede4ac55 | 210 | |
TUATBM | 8:2dc7ede4ac55 | 211 | inline char BMP280::config() |
TUATBM | 8:2dc7ede4ac55 | 212 | { |
TUATBM | 8:2dc7ede4ac55 | 213 | return ((standByTime << 5) | (pressFilter << 2) | (static_cast<char>(SPI3WriteMode))); |
Skykon | 9:315c0737f4bc | 214 | //return ((static_cast<char>(0) << 5) | (static_cast<char>(4) << 2) | (static_cast<char>(0))); |
TUATBM | 8:2dc7ede4ac55 | 215 | } |
TUATBM | 8:2dc7ede4ac55 | 216 | |
TUATBM | 8:2dc7ede4ac55 | 217 | |
TUATBM | 8:2dc7ede4ac55 | 218 | inline void BMP280::setSetters(OptionPowerMode opPM, OptionOverSampling opPOS, OptionOverSampling opTOS, |
TUATBM | 8:2dc7ede4ac55 | 219 | OptionPressFilter opPF, OptionStandByTime opSBT, float outputRate) |
TUATBM | 8:2dc7ede4ac55 | 220 | { |
TUATBM | 8:2dc7ede4ac55 | 221 | setPowerMode(opPM); |
TUATBM | 8:2dc7ede4ac55 | 222 | setPressOverSampling(opPOS); |
TUATBM | 8:2dc7ede4ac55 | 223 | setTempOverSampling(opTOS); |
TUATBM | 8:2dc7ede4ac55 | 224 | setPressFilter(opPF); |
TUATBM | 8:2dc7ede4ac55 | 225 | setStandByTime(opSBT); |
TUATBM | 8:2dc7ede4ac55 | 226 | setOutputDataRate(outputRate); |
TUATBM | 8:2dc7ede4ac55 | 227 | } |
TUATBM | 8:2dc7ede4ac55 | 228 | |
TUATBM | 8:2dc7ede4ac55 | 229 | inline void BMP280::setOutputDataRate(float Hz){ |
TUATBM | 8:2dc7ede4ac55 | 230 | sampleRate = Hz; |
TUATBM | 8:2dc7ede4ac55 | 231 | sampleTime = 1000.0 / Hz; |
TUATBM | 8:2dc7ede4ac55 | 232 | } |
TUATBM | 8:2dc7ede4ac55 | 233 | |
TUATBM | 8:2dc7ede4ac55 | 234 | |
MACRUM | 0:ade9be832910 | 235 | #endif // MBED_BME280_H |