Multi environmental sensor

My version of the bme280 pressure, humidity and temperature sensor

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?

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