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:
Wed Aug 23 09:23:32 2017 +0000
Revision:
4:37fed112956c
Parent:
3:20e0c6b19c24
countermeasure for  NonCopyable

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 4:37fed112956c 5 * Copyright (c) 2013,'14,'17 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 4:37fed112956c 8 * Created: August 14th, 2013 for STM32L152
kenjiArai 4:37fed112956c 9 * Changed: May 21st, 2014 mbed LPC1114
kenjiArai 4:37fed112956c 10 * Revised: August 23rd, 2017
kenjiArai 0:9c1a7a1f0d97 11 */
kenjiArai 0:9c1a7a1f0d97 12
kenjiArai 0:9c1a7a1f0d97 13 #ifndef BMP180_H
kenjiArai 0:9c1a7a1f0d97 14 #define BMP180_H
kenjiArai 0:9c1a7a1f0d97 15
kenjiArai 0:9c1a7a1f0d97 16 #include "mbed.h"
kenjiArai 0:9c1a7a1f0d97 17
kenjiArai 2:b81e7659be7a 18 // Bosch barmeter ID
kenjiArai 2:b81e7659be7a 19 #define BMP180_CHIP_ID 0x55
kenjiArai 2:b81e7659be7a 20
kenjiArai 2:b81e7659be7a 21 /** Interface for Bosch Pressure Sensor (I2C Interface) BMP180
kenjiArai 2:b81e7659be7a 22 *
kenjiArai 2:b81e7659be7a 23 * Measurement Air pressure (Barometer) and temperature via I2C interface.
kenjiArai 2:b81e7659be7a 24 *
kenjiArai 2:b81e7659be7a 25 * Chip has compensation data in the sensor (inside of EEPROM).
kenjiArai 2:b81e7659be7a 26 *
kenjiArai 2:b81e7659be7a 27 * Normalization is specified in the documentation as follows.
kenjiArai 2:b81e7659be7a 28 *
kenjiArai 2:b81e7659be7a 29 * Bosch Sensortec BMP180 Datasheet : BST-BMP180-DS000-09 Revision: 2.5 Date: 5 April 2013
kenjiArai 2:b81e7659be7a 30 *
kenjiArai 2:b81e7659be7a 31 * @code
kenjiArai 2:b81e7659be7a 32 * #include "mbed.h"
kenjiArai 2:b81e7659be7a 33 *
kenjiArai 2:b81e7659be7a 34 * // I2C Communication
kenjiArai 2:b81e7659be7a 35 * BMP180(PinName p_sda, PinName p_scl); // SDA, SCL
kenjiArai 2:b81e7659be7a 36 * // If you connected I2C line not only this device but also other devices,
kenjiArai 2:b81e7659be7a 37 * // you need to declare following method.
kenjiArai 2:b81e7659be7a 38 * I2C i2c(dp5,dp27); // SDA, SCL
kenjiArai 2:b81e7659be7a 39 * BMP180(I2C& p_i2c);
kenjiArai 2:b81e7659be7a 40 *
kenjiArai 2:b81e7659be7a 41 * int main() {
kenjiArai 2:b81e7659be7a 42 * float pressure, temperature;
kenjiArai 2:b81e7659be7a 43 *
kenjiArai 2:b81e7659be7a 44 * bmp180.normalize(); // This is important function Data read from BMP180 then normalization
kenjiArai 3:20e0c6b19c24 45 * pressure = bmp180.read_pressure(); // just read the data
kenjiArai 3:20e0c6b19c24 46 * temperature = bmp180.read_temperature(); // just read the data
kenjiArai 2:b81e7659be7a 47 * }
kenjiArai 2:b81e7659be7a 48 * @endcode
kenjiArai 2:b81e7659be7a 49 */
kenjiArai 2:b81e7659be7a 50
kenjiArai 0:9c1a7a1f0d97 51 class BMP180 {
kenjiArai 0:9c1a7a1f0d97 52 public:
kenjiArai 2:b81e7659be7a 53 /** Configure data pin
kenjiArai 2:b81e7659be7a 54 * @param data SDA and SCL pins
kenjiArai 2:b81e7659be7a 55 */
kenjiArai 0:9c1a7a1f0d97 56 BMP180(PinName p_sda, PinName p_scl);
kenjiArai 2:b81e7659be7a 57
kenjiArai 2:b81e7659be7a 58 /** Configure data pin (with other devices on I2C line)
kenjiArai 2:b81e7659be7a 59 * @param I2C previous definition
kenjiArai 2:b81e7659be7a 60 */
kenjiArai 0:9c1a7a1f0d97 61 BMP180(I2C& p_i2c);
kenjiArai 0:9c1a7a1f0d97 62
kenjiArai 2:b81e7659be7a 63 /** Read a float type data from BMP180
kenjiArai 2:b81e7659be7a 64 * @param none
kenjiArai 2:b81e7659be7a 65 * @return temperature unit:degreeC(Celsius)
kenjiArai 2:b81e7659be7a 66 */
kenjiArai 0:9c1a7a1f0d97 67 float read_temperature();
kenjiArai 2:b81e7659be7a 68
kenjiArai 2:b81e7659be7a 69 /** Read a float type data from BMP180
kenjiArai 2:b81e7659be7a 70 * @param none
kenjiArai 2:b81e7659be7a 71 * @return pressure unit:hPa(hectopascals)
kenjiArai 2:b81e7659be7a 72 */
kenjiArai 0:9c1a7a1f0d97 73 float read_pressure();
kenjiArai 2:b81e7659be7a 74
kenjiArai 2:b81e7659be7a 75 /** Read a BMP180 ID number
kenjiArai 2:b81e7659be7a 76 * @param none
kenjiArai 2:b81e7659be7a 77 * @return if BMP180, it should be 0x55.
kenjiArai 2:b81e7659be7a 78 */
kenjiArai 0:9c1a7a1f0d97 79 uint8_t read_baro_id();
kenjiArai 2:b81e7659be7a 80
kenjiArai 2:b81e7659be7a 81 /** Read press and temp data from BMP180 then normalize the data.
kenjiArai 2:b81e7659be7a 82 * @param none
kenjiArai 2:b81e7659be7a 83 * @return none (The result is able to read read_temperature() or read_pressure()).
kenjiArai 2:b81e7659be7a 84 */
kenjiArai 0:9c1a7a1f0d97 85 void normalize();
kenjiArai 0:9c1a7a1f0d97 86
kenjiArai 0:9c1a7a1f0d97 87 protected:
kenjiArai 0:9c1a7a1f0d97 88 void init(void);
kenjiArai 4:37fed112956c 89 void _i2c_read_n_bytes(int, char*, int);
kenjiArai 4:37fed112956c 90 void _i2c_write_n_bytes(int, char*, int);
kenjiArai 0:9c1a7a1f0d97 91
kenjiArai 4:37fed112956c 92 I2C *_i2c_p;
kenjiArai 4:37fed112956c 93 I2C &_i2c;
kenjiArai 4:37fed112956c 94
kenjiArai 0:9c1a7a1f0d97 95 float temperature;
kenjiArai 0:9c1a7a1f0d97 96 float pressure;
kenjiArai 0:9c1a7a1f0d97 97 uint8_t id_number;
kenjiArai 0:9c1a7a1f0d97 98
kenjiArai 0:9c1a7a1f0d97 99 private:
kenjiArai 0:9c1a7a1f0d97 100 // save EEPROM Data (Coefficient data)
kenjiArai 0:9c1a7a1f0d97 101 int16_t eep_ac1, eep_ac2, eep_ac3;
kenjiArai 0:9c1a7a1f0d97 102 uint16_t eep_ac4, eep_ac5, eep_ac6;
kenjiArai 0:9c1a7a1f0d97 103 int16_t eep_b1, eep_b2, eep_mb; // eep_mb:not use
kenjiArai 0:9c1a7a1f0d97 104 int16_t eep_mc, eep_md;
kenjiArai 0:9c1a7a1f0d97 105 // temporary save
kenjiArai 0:9c1a7a1f0d97 106 char baro_dt[4];
kenjiArai 0:9c1a7a1f0d97 107 // address
kenjiArai 0:9c1a7a1f0d97 108 char BMP180_addr;
kenjiArai 0:9c1a7a1f0d97 109 };
kenjiArai 0:9c1a7a1f0d97 110
kenjiArai 3:20e0c6b19c24 111 #endif // BMP180_H
kenjiArai 4:37fed112956c 112