a

Dependents:   Skipper_operation gy-91_tset Autoflight2022_913

Fork of BMP280 by Edwin Cho

Committer:
Skykon
Date:
Sun Aug 25 08:36:14 2019 +0000
Revision:
9:315c0737f4bc
Parent:
8:2dc7ede4ac55
a

Who changed what in which revision?

UserRevisionLine numberNew 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