-
Notifications
You must be signed in to change notification settings - Fork 194
/
Adafruit_BMP085.h
112 lines (101 loc) · 3.74 KB
/
Adafruit_BMP085.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*!
* @file Adafruit_BMP085.h
*
* This is a library for the Adafruit BMP085/BMP180 Barometric Pressure + Temp
* sensor
*
* Designed specifically to work with the Adafruit BMP085 or BMP180 Breakout
* ----> http://www.adafruit.com/products/391
* ----> http://www.adafruit.com/products/1603
*
* These displays use I2C to communicate, 2 pins are required to
* interface
* Adafruit invests time and resources providing this open source code,
* please support Adafruit and open-source hardware by purchasing
* products from Adafruit!
*
* Written by Limor Fried/Ladyada for Adafruit Industries.
* BSD license, all text above must be included in any redistribution
*/
#ifndef ADAFRUIT_BMP085_H
#define ADAFRUIT_BMP085_H
#include <Adafruit_I2CDevice.h>
#include <Arduino.h>
#define BMP085_DEBUG 0 //!< Debug mode
#define BMP085_I2CADDR 0x77 //!< BMP085 I2C address
#define BMP085_ULTRALOWPOWER 0 //!< Ultra low power mode
#define BMP085_STANDARD 1 //!< Standard mode
#define BMP085_HIGHRES 2 //!< High-res mode
#define BMP085_ULTRAHIGHRES 3 //!< Ultra high-res mode
#define BMP085_CAL_AC1 0xAA //!< R Calibration data (16 bits)
#define BMP085_CAL_AC2 0xAC //!< R Calibration data (16 bits)
#define BMP085_CAL_AC3 0xAE //!< R Calibration data (16 bits)
#define BMP085_CAL_AC4 0xB0 //!< R Calibration data (16 bits)
#define BMP085_CAL_AC5 0xB2 //!< R Calibration data (16 bits)
#define BMP085_CAL_AC6 0xB4 //!< R Calibration data (16 bits)
#define BMP085_CAL_B1 0xB6 //!< R Calibration data (16 bits)
#define BMP085_CAL_B2 0xB8 //!< R Calibration data (16 bits)
#define BMP085_CAL_MB 0xBA //!< R Calibration data (16 bits)
#define BMP085_CAL_MC 0xBC //!< R Calibration data (16 bits)
#define BMP085_CAL_MD 0xBE //!< R Calibration data (16 bits)
#define BMP085_CONTROL 0xF4 //!< Control register
#define BMP085_TEMPDATA 0xF6 //!< Temperature data register
#define BMP085_PRESSUREDATA 0xF6 //!< Pressure data register
#define BMP085_READTEMPCMD 0x2E //!< Read temperature control register value
#define BMP085_READPRESSURECMD 0x34 //!< Read pressure control register value
/*!
* @brief Main BMP085 class
*/
class Adafruit_BMP085 {
public:
Adafruit_BMP085();
/*!
* @brief Starts I2C connection
* @param mode Mode to set, ultra high-res by default
* @param wire The I2C interface to use, defaults to Wire
* @return Returns true if successful
*/
bool begin(uint8_t mode = BMP085_ULTRAHIGHRES, TwoWire *wire = &Wire);
/*!
* @brief Gets the temperature over I2C from the BMP085
* @return Returns the temperature
*/
float readTemperature(void);
/*!
* @brief Gets the pressure over I2C from the BMP085
* @return Returns the pressure
*/
int32_t readPressure(void);
/*!
* @brief Calculates the pressure at sea level
* @param altitude_meters Current altitude (in meters)
* @return Returns the calculated pressure at sea level
*/
int32_t readSealevelPressure(float altitude_meters = 0);
/*!
* @brief Reads the altitude
* @param sealevelPressure Pressure at sea level, measured in pascals
* @return Returns the altitude
*/
float readAltitude(float sealevelPressure = 101325); // std atmosphere
/*!
* @brief Reads the raw temperature
* @return Returns the raw temperature
*/
uint16_t readRawTemperature(void);
/*!
* @brief Reads the raw pressure
* @return Returns the raw pressure
*/
uint32_t readRawPressure(void);
private:
int32_t computeB5(int32_t UT);
uint8_t read8(uint8_t addr);
uint16_t read16(uint8_t addr);
void write8(uint8_t addr, uint8_t data);
Adafruit_I2CDevice *i2c_dev;
uint8_t oversampling;
int16_t ac1, ac2, ac3, b1, b2, mb, mc, md;
uint16_t ac4, ac5, ac6;
};
#endif // ADAFRUIT_BMP085_H