Multi environmental sensor
My version of the bme280 pressure, humidity and temperature sensor
bme280.h@3:96075bee19f0, 2016-04-22 (annotated)
- Committer:
- loopsva
- Date:
- Fri Apr 22 14:25:55 2016 +0000
- Revision:
- 3:96075bee19f0
- Parent:
- 0:40b4ebf843c6
- Child:
- 2:bb91307d5c4d
Trying again to delete VEML60xx remenants
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
loopsva | 0:40b4ebf843c6 | 1 | #ifndef BME280_H |
loopsva | 0:40b4ebf843c6 | 2 | #define BME280_H |
loopsva | 0:40b4ebf843c6 | 3 | |
loopsva | 0:40b4ebf843c6 | 4 | #include "mbed.h" |
loopsva | 0:40b4ebf843c6 | 5 | |
loopsva | 0:40b4ebf843c6 | 6 | #if(defined(TARGET_KL25Z) || defined(TARGET_K64F)) |
loopsva | 0:40b4ebf843c6 | 7 | |
loopsva | 0:40b4ebf843c6 | 8 | // #define BME280i2cLOWLEVEL 1 //if the use of low-level I2C routines is needed |
loopsva | 0:40b4ebf843c6 | 9 | // #warning "BME280 using low level I2C routines" |
loopsva | 0:40b4ebf843c6 | 10 | |
loopsva | 0:40b4ebf843c6 | 11 | #endif |
loopsva | 0:40b4ebf843c6 | 12 | |
loopsva | 0:40b4ebf843c6 | 13 | |
loopsva | 0:40b4ebf843c6 | 14 | #define SEA_PRESS 1013.25 //default sea level pressure level in mb |
loopsva | 0:40b4ebf843c6 | 15 | //#define KNOWNALT 327.0 //default known altitude in feet |
loopsva | 0:40b4ebf843c6 | 16 | #define METERS_FEET 3.2808399 |
loopsva | 0:40b4ebf843c6 | 17 | #define FEET_METERS 0.3048006 |
loopsva | 0:40b4ebf843c6 | 18 | #define MB_INHG_DOUBLE 0.02952998751 |
loopsva | 0:40b4ebf843c6 | 19 | #define INHG_MB_DOUBLE 33.8638815767 |
loopsva | 0:40b4ebf843c6 | 20 | #define DEGC_DEGF_FLOAT 9.0 / 5.0 + 32.0 |
loopsva | 0:40b4ebf843c6 | 21 | #define DEGC_DEGF_INT 9 / 5 + 32 |
loopsva | 0:40b4ebf843c6 | 22 | |
loopsva | 0:40b4ebf843c6 | 23 | #define BME280_WADDR 0xEC //i2c address write mode (CSBpin = 0); |
loopsva | 0:40b4ebf843c6 | 24 | #define BME280_RADDR 0xED //i2c address read mode |
loopsva | 0:40b4ebf843c6 | 25 | |
loopsva | 0:40b4ebf843c6 | 26 | #define BME280_CHIP_ID_REG 0xD0 //Chip ID Register |
loopsva | 0:40b4ebf843c6 | 27 | #define BME280_CAL_DATA_START_1 0x88 //Calibration data parameters |
loopsva | 0:40b4ebf843c6 | 28 | #define BME280_CAL_DATA_START_2 0xE1 //More calibration data parameters |
loopsva | 0:40b4ebf843c6 | 29 | #define BME280_RST_REG 0xE0 //Softreset Register |
loopsva | 0:40b4ebf843c6 | 30 | #define BME280_STAT_REG 0xF3 //Status Register |
loopsva | 0:40b4ebf843c6 | 31 | #define BME280_CTRL_MEAS_REG 0xF4 //Ctrl Measure Register |
loopsva | 0:40b4ebf843c6 | 32 | #define BME280_CTRL_HUMIDITY_REG 0xF2 //Ctrl Humidity Register |
loopsva | 0:40b4ebf843c6 | 33 | #define BME280_CONFIG_REG 0xF5 //Configuration Register |
loopsva | 0:40b4ebf843c6 | 34 | #define BME280_PRESSURE_MSB_REG 0xF7 //Pressure MSB Register |
loopsva | 0:40b4ebf843c6 | 35 | #define BME280_PRESSURE_LSB_REG 0xF8 //Pressure LSB Register |
loopsva | 0:40b4ebf843c6 | 36 | #define BME280_PRESSURE_XLSB_REG 0xF9 //Pressure XLSB Register |
loopsva | 0:40b4ebf843c6 | 37 | #define BME280_TEMPERATURE_MSB_REG 0xFA //Temperature MSB Reg |
loopsva | 0:40b4ebf843c6 | 38 | #define BME280_TEMPERATURE_LSB_REG 0xFB //Temperature LSB Reg |
loopsva | 0:40b4ebf843c6 | 39 | #define BME280_TEMPERATURE_XLSB_REG 0xFC //Temperature XLSB Reg |
loopsva | 0:40b4ebf843c6 | 40 | #define BME280_HUMIDITY_MSB_REG 0xFD //Humidity MSB Reg |
loopsva | 0:40b4ebf843c6 | 41 | #define BME280_HUMIDITY_LSB_REG 0xFE //Humidity LSB Reg |
loopsva | 0:40b4ebf843c6 | 42 | |
loopsva | 0:40b4ebf843c6 | 43 | // Status register bits |
loopsva | 0:40b4ebf843c6 | 44 | #define BME280_STATUS_BUSY 0x08 |
loopsva | 0:40b4ebf843c6 | 45 | #define BME280_STATUS_UNKNOWN 0x04 |
loopsva | 0:40b4ebf843c6 | 46 | #define BME280_STATUS_IMUPDATE 0x01 |
loopsva | 0:40b4ebf843c6 | 47 | |
loopsva | 0:40b4ebf843c6 | 48 | #define BME280_RESET_VALUE 0xB6 |
loopsva | 0:40b4ebf843c6 | 49 | |
loopsva | 0:40b4ebf843c6 | 50 | // Config register equates |
loopsva | 0:40b4ebf843c6 | 51 | #define BME280_OVERSAMPLE_SKIP 0 |
loopsva | 0:40b4ebf843c6 | 52 | #define BME280_OVERSAMPLE_x1 1 |
loopsva | 0:40b4ebf843c6 | 53 | #define BME280_OVERSAMPLE_x2 2 |
loopsva | 0:40b4ebf843c6 | 54 | #define BME280_OVERSAMPLE_x4 3 |
loopsva | 0:40b4ebf843c6 | 55 | #define BME280_OVERSAMPLE_x8 4 |
loopsva | 0:40b4ebf843c6 | 56 | #define BME280_OVERSAMPLE_x16 5 |
loopsva | 0:40b4ebf843c6 | 57 | |
loopsva | 0:40b4ebf843c6 | 58 | #define BME280_TEMP_OVERSAMPLE BME280_OVERSAMPLE_x1 //was x2 |
loopsva | 0:40b4ebf843c6 | 59 | #define BME280_PRESS_OVERSAMPLE BME280_OVERSAMPLE_x1 //was x4 |
loopsva | 0:40b4ebf843c6 | 60 | #define BME280_HUM_OVERSAMPLE BME280_OVERSAMPLE_x1 //was x2 |
loopsva | 0:40b4ebf843c6 | 61 | |
loopsva | 0:40b4ebf843c6 | 62 | #define BME280_MODE_SLEEP 0 |
loopsva | 0:40b4ebf843c6 | 63 | #define BME280_MODE_FORCED 1 |
loopsva | 0:40b4ebf843c6 | 64 | #define BME280_MODE_NORMAL 3 |
loopsva | 0:40b4ebf843c6 | 65 | |
loopsva | 0:40b4ebf843c6 | 66 | #define BME280_STANDBY_0m5 0 |
loopsva | 0:40b4ebf843c6 | 67 | #define BME280_STANDBY_62m5 1 |
loopsva | 0:40b4ebf843c6 | 68 | #define BME280_STANDBY_125m 2 |
loopsva | 0:40b4ebf843c6 | 69 | #define BME280_STANDBY_250m 3 |
loopsva | 0:40b4ebf843c6 | 70 | #define BME280_STANDBY_500m 4 |
loopsva | 0:40b4ebf843c6 | 71 | #define BME280_STANDBY_1000m 5 |
loopsva | 0:40b4ebf843c6 | 72 | #define BME280_STANDBY_10m 6 |
loopsva | 0:40b4ebf843c6 | 73 | #define BME280_STANDBY_20m 7 |
loopsva | 0:40b4ebf843c6 | 74 | |
loopsva | 0:40b4ebf843c6 | 75 | #define BME280_FILTER_OFF 0 |
loopsva | 0:40b4ebf843c6 | 76 | #define BME280_FILTER_2 1 |
loopsva | 0:40b4ebf843c6 | 77 | #define BME280_FILTER_4 2 |
loopsva | 0:40b4ebf843c6 | 78 | #define BME280_FILTER_8 3 |
loopsva | 0:40b4ebf843c6 | 79 | #define BME280_FILTER_16 4 |
loopsva | 0:40b4ebf843c6 | 80 | |
loopsva | 0:40b4ebf843c6 | 81 | //osrs_t(7..5), osrs_p(4..2), mode(1..0) |
loopsva | 0:40b4ebf843c6 | 82 | #define BME280_CTRL_MEAS_REG_DATA ((BME280_TEMP_OVERSAMPLE << 5) | (BME280_PRESS_OVERSAMPLE << 2) | BME280_MODE_NORMAL) |
loopsva | 0:40b4ebf843c6 | 83 | //0(7..3), osrs_h(2..0) |
loopsva | 0:40b4ebf843c6 | 84 | #define BME280_CTRL_HUMIDITY_REG_DATA ((BME280_HUM_OVERSAMPLE)) |
loopsva | 0:40b4ebf843c6 | 85 | //sb(7..5), filter(4..2), 0(1), spl3w_en(0) |
loopsva | 0:40b4ebf843c6 | 86 | #define BME280_CONFIG_REG_DATA ((BME280_STANDBY_1000m << 5) | (BME280_FILTER_OFF << 2)) //was FILTER_4 |
loopsva | 0:40b4ebf843c6 | 87 | |
loopsva | 0:40b4ebf843c6 | 88 | //Until it is understood why data cannot be raed out of BME280 right after BUSY goes false, the |
loopsva | 0:40b4ebf843c6 | 89 | //defines below introduce a variable delay in main(), based on sb bits used. |
loopsva | 0:40b4ebf843c6 | 90 | // example: wait_ms(BME280_MAIN_WAIT); must be put between pth.getBmeRawData(bmed_struct); accesses |
loopsva | 0:40b4ebf843c6 | 91 | #if ((BME280_CONFIG_REG_DATA >> 5) == BME280_STANDBY_0m5) |
loopsva | 0:40b4ebf843c6 | 92 | #define BME280_MAIN_WAIT 100 |
loopsva | 0:40b4ebf843c6 | 93 | #elif ((BME280_CONFIG_REG_DATA >> 5) == BME280_STANDBY_62m5) |
loopsva | 0:40b4ebf843c6 | 94 | #define BME280_MAIN_WAIT 60 |
loopsva | 0:40b4ebf843c6 | 95 | #elif ((BME280_CONFIG_REG_DATA >> 5) == BME280_STANDBY_125m) |
loopsva | 0:40b4ebf843c6 | 96 | #define BME280_MAIN_WAIT 120 |
loopsva | 0:40b4ebf843c6 | 97 | #elif ((BME280_CONFIG_REG_DATA >> 5) == BME280_STANDBY_250m) |
loopsva | 0:40b4ebf843c6 | 98 | #define BME280_MAIN_WAIT 240 |
loopsva | 0:40b4ebf843c6 | 99 | #elif ((BME280_CONFIG_REG_DATA >> 5) == BME280_STANDBY_500m) |
loopsva | 0:40b4ebf843c6 | 100 | #define BME280_MAIN_WAIT 100 |
loopsva | 0:40b4ebf843c6 | 101 | #elif ((BME280_CONFIG_REG_DATA >> 5) == BME280_STANDBY_1000m) |
loopsva | 0:40b4ebf843c6 | 102 | #define BME280_MAIN_WAIT 500 |
loopsva | 0:40b4ebf843c6 | 103 | #elif ((BME280_CONFIG_REG_DATA >> 5) == BME280_STANDBY_10m) |
loopsva | 0:40b4ebf843c6 | 104 | #define BME280_MAIN_WAIT 50 |
loopsva | 0:40b4ebf843c6 | 105 | #elif ((BME280_CONFIG_REG_DATA >> 5) == BME280_STANDBY_20m) |
loopsva | 0:40b4ebf843c6 | 106 | #define BME280_MAIN_WAIT 59 |
loopsva | 0:40b4ebf843c6 | 107 | #endif |
loopsva | 0:40b4ebf843c6 | 108 | |
loopsva | 0:40b4ebf843c6 | 109 | |
loopsva | 0:40b4ebf843c6 | 110 | /** |
loopsva | 0:40b4ebf843c6 | 111 | * Create bme280 controller class |
loopsva | 0:40b4ebf843c6 | 112 | * |
loopsva | 0:40b4ebf843c6 | 113 | * @param bme280 class |
loopsva | 0:40b4ebf843c6 | 114 | * |
loopsva | 0:40b4ebf843c6 | 115 | */ |
loopsva | 0:40b4ebf843c6 | 116 | class bme280 { |
loopsva | 0:40b4ebf843c6 | 117 | |
loopsva | 0:40b4ebf843c6 | 118 | public: |
loopsva | 0:40b4ebf843c6 | 119 | |
loopsva | 0:40b4ebf843c6 | 120 | /** |
loopsva | 0:40b4ebf843c6 | 121 | * Public data structure for CME280 correction values. |
loopsva | 0:40b4ebf843c6 | 122 | * |
loopsva | 0:40b4ebf843c6 | 123 | **/ |
loopsva | 0:40b4ebf843c6 | 124 | typedef struct { |
loopsva | 0:40b4ebf843c6 | 125 | uint16_t dig_T1; /*!< calibration parameter -> Temp T1 */ |
loopsva | 0:40b4ebf843c6 | 126 | int16_t dig_T2; /*!< calibration parameter -> Temp T2 */ |
loopsva | 0:40b4ebf843c6 | 127 | int16_t dig_T3; /*!< calibration parameter -> Temp T3 */ |
loopsva | 0:40b4ebf843c6 | 128 | |
loopsva | 0:40b4ebf843c6 | 129 | uint16_t dig_P1; /*!< calibration parameter -> Press P1 */ |
loopsva | 0:40b4ebf843c6 | 130 | int16_t dig_P2; /*!< calibration parameter -> Press P2 */ |
loopsva | 0:40b4ebf843c6 | 131 | int16_t dig_P3; /*!< calibration parameter -> Press P3 */ |
loopsva | 0:40b4ebf843c6 | 132 | int16_t dig_P4; /*!< calibration parameter -> Press P4 */ |
loopsva | 0:40b4ebf843c6 | 133 | int16_t dig_P5; /*!< calibration parameter -> Press P5 */ |
loopsva | 0:40b4ebf843c6 | 134 | int16_t dig_P6; /*!< calibration parameter -> Press P6 */ |
loopsva | 0:40b4ebf843c6 | 135 | int16_t dig_P7; /*!< calibration parameter -> Press P7 */ |
loopsva | 0:40b4ebf843c6 | 136 | int16_t dig_P8; /*!< calibration parameter -> Press P8 */ |
loopsva | 0:40b4ebf843c6 | 137 | int16_t dig_P9; /*!< calibration parameter -> Press P9 */ |
loopsva | 0:40b4ebf843c6 | 138 | |
loopsva | 0:40b4ebf843c6 | 139 | uint8_t dig_H1; /*!< calibration parameter -> Hum H1 */ |
loopsva | 0:40b4ebf843c6 | 140 | int16_t dig_H2; /*!< calibration parameter -> Hum H2 */ |
loopsva | 0:40b4ebf843c6 | 141 | uint8_t dig_H3; /*!< calibration parameter -> Hum H3 */ |
loopsva | 0:40b4ebf843c6 | 142 | int16_t dig_H4; /*!< calibration parameter -> Hum H4 */ |
loopsva | 0:40b4ebf843c6 | 143 | int16_t dig_H5; /*!< calibration parameter -> Hum H5 */ |
loopsva | 0:40b4ebf843c6 | 144 | int8_t dig_H6; /*!< calibration parameter -> Hum H6 */ |
loopsva | 0:40b4ebf843c6 | 145 | |
loopsva | 0:40b4ebf843c6 | 146 | uint32_t t_fine; /*!< scratch T_FINE */ |
loopsva | 0:40b4ebf843c6 | 147 | |
loopsva | 0:40b4ebf843c6 | 148 | uint8_t ctrl_hum_reg; /*!< config -> hum */ |
loopsva | 0:40b4ebf843c6 | 149 | uint8_t ctrl_meas_reg; /*!< config -> temp press mode */ |
loopsva | 0:40b4ebf843c6 | 150 | uint8_t config_reg; /*!< config -> delay filter spi3w */ |
loopsva | 0:40b4ebf843c6 | 151 | } bme_cal; |
loopsva | 0:40b4ebf843c6 | 152 | |
loopsva | 0:40b4ebf843c6 | 153 | /** |
loopsva | 0:40b4ebf843c6 | 154 | * Public data structure to obtain CME280 data. |
loopsva | 0:40b4ebf843c6 | 155 | * |
loopsva | 0:40b4ebf843c6 | 156 | **/ |
loopsva | 0:40b4ebf843c6 | 157 | typedef struct { |
loopsva | 0:40b4ebf843c6 | 158 | int raw_temp; /*!< raw temperature reading, 20 bits */ |
loopsva | 0:40b4ebf843c6 | 159 | int raw_baro; /*!< raw pressure reading, 20 bits */ |
loopsva | 0:40b4ebf843c6 | 160 | int raw_hum; /*!< raw humidity reading, 16 bits */ |
loopsva | 0:40b4ebf843c6 | 161 | int corr_temp; /*!< corrected temperature as integer*/ |
loopsva | 0:40b4ebf843c6 | 162 | int64_t corr_baro; /*!< corrected pressure as integer */ |
loopsva | 0:40b4ebf843c6 | 163 | uint32_t corr_hum; /*!< corrected humidity as integer */ |
loopsva | 0:40b4ebf843c6 | 164 | double bme_temp; /*!< corrected temperature as a float */ |
loopsva | 0:40b4ebf843c6 | 165 | double bme_baro; /*!< corrected pressure as a float */ |
loopsva | 0:40b4ebf843c6 | 166 | double bme_hum; /*!< corrected humidity as a float */ |
loopsva | 0:40b4ebf843c6 | 167 | } bme_data; |
loopsva | 0:40b4ebf843c6 | 168 | |
loopsva | 0:40b4ebf843c6 | 169 | /** |
loopsva | 0:40b4ebf843c6 | 170 | * Public enum for selecting polarity of I2C address pin. |
loopsva | 0:40b4ebf843c6 | 171 | * |
loopsva | 0:40b4ebf843c6 | 172 | * - CSB pin = 0, user set I2C address to 0xEC |
loopsva | 0:40b4ebf843c6 | 173 | * - CSB pin = 1, user set I2C address to 0xEE |
loopsva | 0:40b4ebf843c6 | 174 | * |
loopsva | 0:40b4ebf843c6 | 175 | **/ |
loopsva | 0:40b4ebf843c6 | 176 | enum CSBpolarity { |
loopsva | 0:40b4ebf843c6 | 177 | CSBpin_0, //CSB pin is grounded, I2C address is 0xEC and 0xED |
loopsva | 0:40b4ebf843c6 | 178 | CSBpin_1, //CSB pin is tied to Vdd, I2C address is 0xEE and 0xEF |
loopsva | 0:40b4ebf843c6 | 179 | }; |
loopsva | 0:40b4ebf843c6 | 180 | |
loopsva | 0:40b4ebf843c6 | 181 | /** |
loopsva | 0:40b4ebf843c6 | 182 | * Create a BME280 object using the specified I2C object |
loopsva | 0:40b4ebf843c6 | 183 | * - User defined use of the CSB pin |
loopsva | 0:40b4ebf843c6 | 184 | * - CSB pin = 0, user set I2C address to 0xEC |
loopsva | 0:40b4ebf843c6 | 185 | * - CSB pin = 1, user set I2C address to 0xEE |
loopsva | 0:40b4ebf843c6 | 186 | * @param sda - mbed I2C interface pin |
loopsva | 0:40b4ebf843c6 | 187 | * @param scl - mbed I2C interface pin |
loopsva | 0:40b4ebf843c6 | 188 | * @param bme280::CSBpin_0 - CSB pin tied to ground |
loopsva | 0:40b4ebf843c6 | 189 | * @param bme280::CSBpin_1 - CSB pin tied to VDD |
loopsva | 0:40b4ebf843c6 | 190 | */ |
loopsva | 0:40b4ebf843c6 | 191 | bme280(PinName sda, PinName scl, CSBpolarity CSBpin); |
loopsva | 0:40b4ebf843c6 | 192 | |
loopsva | 0:40b4ebf843c6 | 193 | /** |
loopsva | 0:40b4ebf843c6 | 194 | * Destructor |
loopsva | 0:40b4ebf843c6 | 195 | * |
loopsva | 0:40b4ebf843c6 | 196 | * @param --none-- |
loopsva | 0:40b4ebf843c6 | 197 | */ |
loopsva | 0:40b4ebf843c6 | 198 | ~bme280(); |
loopsva | 0:40b4ebf843c6 | 199 | |
loopsva | 0:40b4ebf843c6 | 200 | /** |
loopsva | 0:40b4ebf843c6 | 201 | * Get BME280 ID Register |
loopsva | 0:40b4ebf843c6 | 202 | * |
loopsva | 0:40b4ebf843c6 | 203 | * @param --none-- |
loopsva | 0:40b4ebf843c6 | 204 | * |
loopsva | 0:40b4ebf843c6 | 205 | * @return ID Register value |
loopsva | 0:40b4ebf843c6 | 206 | */ |
loopsva | 0:40b4ebf843c6 | 207 | uint8_t getBmeID(); |
loopsva | 0:40b4ebf843c6 | 208 | |
loopsva | 0:40b4ebf843c6 | 209 | /** |
loopsva | 0:40b4ebf843c6 | 210 | * Soft Reset the BME280 |
loopsva | 0:40b4ebf843c6 | 211 | * |
loopsva | 0:40b4ebf843c6 | 212 | * @param --none-- |
loopsva | 0:40b4ebf843c6 | 213 | * |
loopsva | 0:40b4ebf843c6 | 214 | * @return ACK/NACK status |
loopsva | 0:40b4ebf843c6 | 215 | */ |
loopsva | 0:40b4ebf843c6 | 216 | uint8_t resetBme(); |
loopsva | 0:40b4ebf843c6 | 217 | |
loopsva | 0:40b4ebf843c6 | 218 | /** |
loopsva | 0:40b4ebf843c6 | 219 | * Get BME280 Status Register |
loopsva | 0:40b4ebf843c6 | 220 | * |
loopsva | 0:40b4ebf843c6 | 221 | * @param --none-- |
loopsva | 0:40b4ebf843c6 | 222 | * |
loopsva | 0:40b4ebf843c6 | 223 | * @return Status Register value |
loopsva | 0:40b4ebf843c6 | 224 | */ |
loopsva | 0:40b4ebf843c6 | 225 | uint8_t getBmeStatus(); |
loopsva | 0:40b4ebf843c6 | 226 | |
loopsva | 0:40b4ebf843c6 | 227 | /** |
loopsva | 0:40b4ebf843c6 | 228 | * Get BME280 Raw Data |
loopsva | 0:40b4ebf843c6 | 229 | * |
loopsva | 0:40b4ebf843c6 | 230 | * @param pointer to struct bme_data |
loopsva | 0:40b4ebf843c6 | 231 | * |
loopsva | 0:40b4ebf843c6 | 232 | * @return Status Register value. Pass-thru from getBmeStatus() |
loopsva | 0:40b4ebf843c6 | 233 | * @return raw data put into struct bme_data |
loopsva | 0:40b4ebf843c6 | 234 | */ |
loopsva | 0:40b4ebf843c6 | 235 | uint8_t getBmeRawData(bme_data& bmed); |
loopsva | 0:40b4ebf843c6 | 236 | |
loopsva | 0:40b4ebf843c6 | 237 | /** |
loopsva | 0:40b4ebf843c6 | 238 | * Convert BME280 Raw Data using integer based routines |
loopsva | 0:40b4ebf843c6 | 239 | * |
loopsva | 0:40b4ebf843c6 | 240 | * @param pointer to struct bme_data |
loopsva | 0:40b4ebf843c6 | 241 | * @param pointer to struct bme_cal |
loopsva | 0:40b4ebf843c6 | 242 | * |
loopsva | 0:40b4ebf843c6 | 243 | * @return converted data put into struct bme_data |
loopsva | 0:40b4ebf843c6 | 244 | */ |
loopsva | 0:40b4ebf843c6 | 245 | void convertBmeRawData(bme_data& bmed, bme_cal& bmec); |
loopsva | 0:40b4ebf843c6 | 246 | |
loopsva | 0:40b4ebf843c6 | 247 | /** |
loopsva | 0:40b4ebf843c6 | 248 | * Convert BME280 Raw Data using all floating routines |
loopsva | 0:40b4ebf843c6 | 249 | * |
loopsva | 0:40b4ebf843c6 | 250 | * @param pointer to struct bme_data |
loopsva | 0:40b4ebf843c6 | 251 | * @param pointer to struct bme_cal |
loopsva | 0:40b4ebf843c6 | 252 | * |
loopsva | 0:40b4ebf843c6 | 253 | * @return converted data put into struct bme_data |
loopsva | 0:40b4ebf843c6 | 254 | */ |
loopsva | 0:40b4ebf843c6 | 255 | void convertBmeRawDataFloat(bme_data& bmed, bme_cal& bmec); |
loopsva | 0:40b4ebf843c6 | 256 | |
loopsva | 0:40b4ebf843c6 | 257 | /** |
loopsva | 0:40b4ebf843c6 | 258 | * Initialize the BME280. |
loopsva | 0:40b4ebf843c6 | 259 | * - Sets up the command registers |
loopsva | 0:40b4ebf843c6 | 260 | * - Loads up the calibration data |
loopsva | 0:40b4ebf843c6 | 261 | * |
loopsva | 0:40b4ebf843c6 | 262 | * @param pointer to struct bme_data |
loopsva | 0:40b4ebf843c6 | 263 | * |
loopsva | 0:40b4ebf843c6 | 264 | * @return 0 |
loopsva | 0:40b4ebf843c6 | 265 | */ |
loopsva | 0:40b4ebf843c6 | 266 | uint8_t initBme(bme_cal& bmec); |
loopsva | 0:40b4ebf843c6 | 267 | |
loopsva | 0:40b4ebf843c6 | 268 | /** |
loopsva | 0:40b4ebf843c6 | 269 | * Corrected altitude (feet) from barometer at seal level (mB) |
loopsva | 0:40b4ebf843c6 | 270 | * |
loopsva | 0:40b4ebf843c6 | 271 | * @param pointer to struct bme_data |
loopsva | 0:40b4ebf843c6 | 272 | * @param pressure at sea level (in mB) |
loopsva | 0:40b4ebf843c6 | 273 | * |
loopsva | 0:40b4ebf843c6 | 274 | * @return corrected altimeter (in feet) |
loopsva | 0:40b4ebf843c6 | 275 | */ |
loopsva | 0:40b4ebf843c6 | 276 | float getAltitudeFT(bme_data& bmed, float sea_pressure); |
loopsva | 0:40b4ebf843c6 | 277 | |
loopsva | 0:40b4ebf843c6 | 278 | /** |
loopsva | 0:40b4ebf843c6 | 279 | * Altitude corrected barometer (feet) |
loopsva | 0:40b4ebf843c6 | 280 | * |
loopsva | 0:40b4ebf843c6 | 281 | * @param pointer to struct bme_data |
loopsva | 0:40b4ebf843c6 | 282 | * @param known_alt in feet |
loopsva | 0:40b4ebf843c6 | 283 | * |
loopsva | 0:40b4ebf843c6 | 284 | * @return corrected barometer |
loopsva | 0:40b4ebf843c6 | 285 | */ |
loopsva | 0:40b4ebf843c6 | 286 | float getSeaLevelBaroFT(bme_data& bmed, float known_alt); |
loopsva | 0:40b4ebf843c6 | 287 | |
loopsva | 0:40b4ebf843c6 | 288 | /** |
loopsva | 0:40b4ebf843c6 | 289 | * Altitude corrected barometer (meters) |
loopsva | 0:40b4ebf843c6 | 290 | * |
loopsva | 0:40b4ebf843c6 | 291 | * @param pointer to struct bme_data |
loopsva | 0:40b4ebf843c6 | 292 | * @param known_alt in meters |
loopsva | 0:40b4ebf843c6 | 293 | * |
loopsva | 0:40b4ebf843c6 | 294 | * @return corrected barometer |
loopsva | 0:40b4ebf843c6 | 295 | */ |
loopsva | 0:40b4ebf843c6 | 296 | float getSeaLevelBaroM(bme_data& bmed, float known_alt); |
loopsva | 0:40b4ebf843c6 | 297 | |
loopsva | 0:40b4ebf843c6 | 298 | /** |
loopsva | 0:40b4ebf843c6 | 299 | * Return the dew point based on T & H. Slower but more accurate. |
loopsva | 0:40b4ebf843c6 | 300 | * |
loopsva | 0:40b4ebf843c6 | 301 | * @param pointer to struct bme_data |
loopsva | 0:40b4ebf843c6 | 302 | * |
loopsva | 0:40b4ebf843c6 | 303 | * @return dew point in degrees C |
loopsva | 0:40b4ebf843c6 | 304 | */ |
loopsva | 0:40b4ebf843c6 | 305 | float getDewPt(bme_data& bmed); |
loopsva | 0:40b4ebf843c6 | 306 | |
loopsva | 0:40b4ebf843c6 | 307 | /** |
loopsva | 0:40b4ebf843c6 | 308 | * Return the dew point based on T & H. Faster but less accurate. |
loopsva | 0:40b4ebf843c6 | 309 | * |
loopsva | 0:40b4ebf843c6 | 310 | * @param pointer to struct bme_data |
loopsva | 0:40b4ebf843c6 | 311 | * |
loopsva | 0:40b4ebf843c6 | 312 | * @return dew point in degrees C |
loopsva | 0:40b4ebf843c6 | 313 | */ |
loopsva | 0:40b4ebf843c6 | 314 | float getDewPtFast(bme_data& bmed); |
loopsva | 0:40b4ebf843c6 | 315 | |
loopsva | 0:40b4ebf843c6 | 316 | private: |
loopsva | 0:40b4ebf843c6 | 317 | #if not defined BMEi2cLOWLEVEL |
loopsva | 0:40b4ebf843c6 | 318 | char bme280Buffer[32]; |
loopsva | 0:40b4ebf843c6 | 319 | #endif |
loopsva | 0:40b4ebf843c6 | 320 | char i2cWAddr; |
loopsva | 0:40b4ebf843c6 | 321 | char i2cRAddr; |
loopsva | 0:40b4ebf843c6 | 322 | int _i2c_start(uint8_t i2c_addr); |
loopsva | 0:40b4ebf843c6 | 323 | void _i2c_stop(); |
loopsva | 0:40b4ebf843c6 | 324 | uint8_t _i2c_write(uint8_t data); |
loopsva | 0:40b4ebf843c6 | 325 | uint8_t _i2c_readACK(); |
loopsva | 0:40b4ebf843c6 | 326 | uint8_t _i2c_readNACK(); |
loopsva | 0:40b4ebf843c6 | 327 | |
loopsva | 0:40b4ebf843c6 | 328 | protected: |
loopsva | 0:40b4ebf843c6 | 329 | I2C _i2c; |
loopsva | 0:40b4ebf843c6 | 330 | }; |
loopsva | 0:40b4ebf843c6 | 331 | #endif |