2016-07-07 15:04:17 +00:00
|
|
|
/**
|
|
|
|
* 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 <stdint.h>
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Uncomment to enable debug output.
|
|
|
|
*/
|
2016-07-07 20:39:25 +00:00
|
|
|
// #define BMP280_DEBUG
|
2016-07-07 15:04:17 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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 {
|
2016-07-07 20:39:25 +00:00
|
|
|
BMP280_MODE_SLEEP = 0,
|
2016-07-07 15:04:17 +00:00
|
|
|
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.
|
2016-07-07 20:39:25 +00:00
|
|
|
* Default configuration:
|
|
|
|
* mode: NORAML
|
|
|
|
* filter: OFF
|
|
|
|
* oversampling: x4
|
|
|
|
* standby time: 250ms
|
2016-07-07 15:04:17 +00:00
|
|
|
*/
|
|
|
|
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();
|
|
|
|
|
2016-07-07 20:39:25 +00:00
|
|
|
/**
|
|
|
|
* Check if BMP280 is busy with measuring temperature/pressure.
|
|
|
|
* Return true if BMP280 is busy.
|
|
|
|
*/
|
|
|
|
bool bmp280_is_measuring();
|
|
|
|
|
2016-07-07 15:04:17 +00:00
|
|
|
/**
|
|
|
|
* Read compensated temperature and pressure data.
|
2016-07-07 20:39:25 +00:00
|
|
|
* Temperature in degrees Celsius.
|
|
|
|
* Pressure in Pascals.
|
2016-07-07 15:04:17 +00:00
|
|
|
*/
|
|
|
|
bool bmp280_read(float *temperature, float *pressure);
|
|
|
|
|
2016-07-07 20:39:25 +00:00
|
|
|
/**
|
|
|
|
* Restart BMP280 module.
|
|
|
|
*/
|
|
|
|
bool bmp280_soft_reset();
|
|
|
|
|
2016-07-07 15:04:17 +00:00
|
|
|
#endif // __BMP280_H__
|