BMP180 is a digital barometric pressure sensor made by Bosch Sensortec (I2C Interface)

Dependents:   LPC1114_data_logger ProjectIOT Wether_Meter LPC1114_barometer_with_data_logging

Committer:
kenjiArai
Date:
Sun Jun 29 06:51:05 2014 +0000
Revision:
3:20e0c6b19c24
Parent:
2:b81e7659be7a
Child:
4:37fed112956c
small modification

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:9c1a7a1f0d97 1 /*
kenjiArai 0:9c1a7a1f0d97 2 * mbed library program
kenjiArai 0:9c1a7a1f0d97 3 * Control BMP180(Bosch) Pressure Sensor
kenjiArai 0:9c1a7a1f0d97 4 *
kenjiArai 0:9c1a7a1f0d97 5 * Copyright (c) 2014 Kenji Arai / JH1PJL
kenjiArai 0:9c1a7a1f0d97 6 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:9c1a7a1f0d97 7 * http://mbed.org/users/kenjiArai/
kenjiArai 0:9c1a7a1f0d97 8 * Created: August 14th, 2013 for STM32L152
kenjiArai 0:9c1a7a1f0d97 9 * Changed: May 21st, 2014 mbed LPC1114
kenjiArai 2:b81e7659be7a 10 * Revised: June 22nd, 2014
kenjiArai 0:9c1a7a1f0d97 11 *
kenjiArai 0:9c1a7a1f0d97 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 0:9c1a7a1f0d97 13 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 0:9c1a7a1f0d97 14 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 0:9c1a7a1f0d97 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 0:9c1a7a1f0d97 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 0:9c1a7a1f0d97 17 */
kenjiArai 0:9c1a7a1f0d97 18
kenjiArai 0:9c1a7a1f0d97 19 #ifndef BMP180_H
kenjiArai 0:9c1a7a1f0d97 20 #define BMP180_H
kenjiArai 0:9c1a7a1f0d97 21
kenjiArai 0:9c1a7a1f0d97 22 #include "mbed.h"
kenjiArai 0:9c1a7a1f0d97 23
kenjiArai 2:b81e7659be7a 24 // Bosch barmeter ID
kenjiArai 2:b81e7659be7a 25 #define BMP180_CHIP_ID 0x55
kenjiArai 2:b81e7659be7a 26
kenjiArai 2:b81e7659be7a 27 /** Interface for Bosch Pressure Sensor (I2C Interface) BMP180
kenjiArai 2:b81e7659be7a 28 *
kenjiArai 2:b81e7659be7a 29 * Measurement Air pressure (Barometer) and temperature via I2C interface.
kenjiArai 2:b81e7659be7a 30 *
kenjiArai 2:b81e7659be7a 31 * Chip has compensation data in the sensor (inside of EEPROM).
kenjiArai 2:b81e7659be7a 32 *
kenjiArai 2:b81e7659be7a 33 * Normalization is specified in the documentation as follows.
kenjiArai 2:b81e7659be7a 34 *
kenjiArai 2:b81e7659be7a 35 * Bosch Sensortec BMP180 Datasheet : BST-BMP180-DS000-09 Revision: 2.5 Date: 5 April 2013
kenjiArai 2:b81e7659be7a 36 *
kenjiArai 2:b81e7659be7a 37 * @code
kenjiArai 2:b81e7659be7a 38 * #include "mbed.h"
kenjiArai 2:b81e7659be7a 39 *
kenjiArai 2:b81e7659be7a 40 * // I2C Communication
kenjiArai 2:b81e7659be7a 41 * BMP180(PinName p_sda, PinName p_scl); // SDA, SCL
kenjiArai 2:b81e7659be7a 42 * // If you connected I2C line not only this device but also other devices,
kenjiArai 2:b81e7659be7a 43 * // you need to declare following method.
kenjiArai 2:b81e7659be7a 44 * I2C i2c(dp5,dp27); // SDA, SCL
kenjiArai 2:b81e7659be7a 45 * BMP180(I2C& p_i2c);
kenjiArai 2:b81e7659be7a 46 *
kenjiArai 2:b81e7659be7a 47 * int main() {
kenjiArai 2:b81e7659be7a 48 * float pressure, temperature;
kenjiArai 2:b81e7659be7a 49 *
kenjiArai 2:b81e7659be7a 50 * bmp180.normalize(); // This is important function Data read from BMP180 then normalization
kenjiArai 3:20e0c6b19c24 51 * pressure = bmp180.read_pressure(); // just read the data
kenjiArai 3:20e0c6b19c24 52 * temperature = bmp180.read_temperature(); // just read the data
kenjiArai 2:b81e7659be7a 53 * }
kenjiArai 2:b81e7659be7a 54 * @endcode
kenjiArai 2:b81e7659be7a 55 */
kenjiArai 2:b81e7659be7a 56
kenjiArai 0:9c1a7a1f0d97 57 class BMP180 {
kenjiArai 0:9c1a7a1f0d97 58 public:
kenjiArai 2:b81e7659be7a 59 /** Configure data pin
kenjiArai 2:b81e7659be7a 60 * @param data SDA and SCL pins
kenjiArai 2:b81e7659be7a 61 */
kenjiArai 0:9c1a7a1f0d97 62 BMP180(PinName p_sda, PinName p_scl);
kenjiArai 2:b81e7659be7a 63
kenjiArai 2:b81e7659be7a 64 /** Configure data pin (with other devices on I2C line)
kenjiArai 2:b81e7659be7a 65 * @param I2C previous definition
kenjiArai 2:b81e7659be7a 66 */
kenjiArai 0:9c1a7a1f0d97 67 BMP180(I2C& p_i2c);
kenjiArai 0:9c1a7a1f0d97 68
kenjiArai 2:b81e7659be7a 69 /** Read a float type data from BMP180
kenjiArai 2:b81e7659be7a 70 * @param none
kenjiArai 2:b81e7659be7a 71 * @return temperature unit:degreeC(Celsius)
kenjiArai 2:b81e7659be7a 72 */
kenjiArai 0:9c1a7a1f0d97 73 float read_temperature();
kenjiArai 2:b81e7659be7a 74
kenjiArai 2:b81e7659be7a 75 /** Read a float type data from BMP180
kenjiArai 2:b81e7659be7a 76 * @param none
kenjiArai 2:b81e7659be7a 77 * @return pressure unit:hPa(hectopascals)
kenjiArai 2:b81e7659be7a 78 */
kenjiArai 0:9c1a7a1f0d97 79 float read_pressure();
kenjiArai 2:b81e7659be7a 80
kenjiArai 2:b81e7659be7a 81 /** Read a BMP180 ID number
kenjiArai 2:b81e7659be7a 82 * @param none
kenjiArai 2:b81e7659be7a 83 * @return if BMP180, it should be 0x55.
kenjiArai 2:b81e7659be7a 84 */
kenjiArai 0:9c1a7a1f0d97 85 uint8_t read_baro_id();
kenjiArai 2:b81e7659be7a 86
kenjiArai 2:b81e7659be7a 87 /** Read press and temp data from BMP180 then normalize the data.
kenjiArai 2:b81e7659be7a 88 * @param none
kenjiArai 2:b81e7659be7a 89 * @return none (The result is able to read read_temperature() or read_pressure()).
kenjiArai 2:b81e7659be7a 90 */
kenjiArai 0:9c1a7a1f0d97 91 void normalize();
kenjiArai 0:9c1a7a1f0d97 92
kenjiArai 0:9c1a7a1f0d97 93 protected:
kenjiArai 0:9c1a7a1f0d97 94 void init(void);
kenjiArai 0:9c1a7a1f0d97 95 void i2c_read_n_bytes(int, char*, int);
kenjiArai 0:9c1a7a1f0d97 96 void i2c_write_n_bytes(int, char*, int);
kenjiArai 0:9c1a7a1f0d97 97
kenjiArai 0:9c1a7a1f0d97 98 I2C i2c;
kenjiArai 0:9c1a7a1f0d97 99 float temperature;
kenjiArai 0:9c1a7a1f0d97 100 float pressure;
kenjiArai 0:9c1a7a1f0d97 101 uint8_t id_number;
kenjiArai 0:9c1a7a1f0d97 102
kenjiArai 0:9c1a7a1f0d97 103 private:
kenjiArai 0:9c1a7a1f0d97 104 // save EEPROM Data (Coefficient data)
kenjiArai 0:9c1a7a1f0d97 105 int16_t eep_ac1, eep_ac2, eep_ac3;
kenjiArai 0:9c1a7a1f0d97 106 uint16_t eep_ac4, eep_ac5, eep_ac6;
kenjiArai 0:9c1a7a1f0d97 107 int16_t eep_b1, eep_b2, eep_mb; // eep_mb:not use
kenjiArai 0:9c1a7a1f0d97 108 int16_t eep_mc, eep_md;
kenjiArai 0:9c1a7a1f0d97 109 // temporary save
kenjiArai 0:9c1a7a1f0d97 110 char baro_dt[4];
kenjiArai 0:9c1a7a1f0d97 111 // address
kenjiArai 0:9c1a7a1f0d97 112 char BMP180_addr;
kenjiArai 0:9c1a7a1f0d97 113 };
kenjiArai 0:9c1a7a1f0d97 114
kenjiArai 3:20e0c6b19c24 115 #endif // BMP180_H