/** * The MIT License (MIT) * * Copyright (c) 2016 sheinz (https://github.com/sheinz) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef __BMP280_H__ #define __BMP280_H__ #include #include /** * Uncomment to enable debug output. */ #define BMP280_DEBUG /** * BMP280 address is 0x77 if SDO pin is high, * Address is 0x76 if SDO pin is low. */ #define BMP280_ADDRESS 0x77 /** * Mode of BMP280 module operation. * Forced - Measurement is initiated by user. * Normal - Continues measurement. */ typedef enum { BMP280_MODE_FORCED = 1, BMP280_MODE_NORMAL = 3 } BMP280_Mode; typedef enum { BMP280_FILTER_OFF = 0, BMP280_FILTER_2 = 1, BMP280_FILTER_4 = 2, BMP280_FILTER_8 = 3, BMP280_FILTER_16 = 4 } BMP280_Filter; /** * Pressure oversampling settings */ typedef enum { BMP280_ULTRA_LOW_POWER = 1, /* oversampling x1 */ BMP280_LOW_POWER = 2, /* oversampling x2 */ BMP280_STANDARD = 3, /* oversampling x4 */ BMP280_HIGH_RES = 4, /* oversampling x8 */ BMP280_ULTRA_HIGH_RES = 5 /* oversampling x16 */ } BMP280_Oversampling; /** * Stand by time between measurements in normal mode */ typedef enum { BMP280_STANDBY_05 = 0, /* stand by time 0.5ms */ BMP280_STANDBY_62 = 1, /* stand by time 62.5ms */ BMP280_STANDBY_125 = 2, /* stand by time 125ms */ BMP280_STANDBY_250 = 3, /* stand by time 250ms */ BMP280_STANDBY_500 = 4, /* stand by time 500ms */ BMP280_STANDBY_1000 = 5, /* stand by time 1s */ BMP280_STANDBY_2000 = 6, /* stand by time 2s */ BMP280_STANDBY_4000 = 7, /* stand by time 4s */ } BMP280_StandbyTime; /** * Configuration parameters for BMP280 module. * Use function bmp280_init_default_params to use default configuration. */ typedef struct { BMP280_Mode mode; BMP280_Filter filter; BMP280_Oversampling oversampling; // pressure oversampling BMP280_StandbyTime standby; } bmp280_params_t; /** * Initialize default parameters. * Default configuration is NORMAL mode. */ void bmp280_init_default_params(bmp280_params_t *params); /** * Initialize BMP280 module. */ bool bmp280_init(bmp280_params_t *params, uint8_t scl_pin, uint8_t sda_pin); /** * Start measurement in forced mode. * The module remains in forced mode after this call. * Do not call this method in normal mode. */ bool bmp280_force_measurement(); /** * Read compensated temperature and pressure data. */ bool bmp280_read(float *temperature, float *pressure); #endif // __BMP280_H__