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

Revision:
4:37fed112956c
Parent:
2:b81e7659be7a
--- a/BMP180.cpp	Sun Jun 29 06:51:05 2014 +0000
+++ b/BMP180.cpp	Wed Aug 23 09:23:32 2017 +0000
@@ -2,18 +2,12 @@
  * mbed library program 
  *  Control BMP180(Bosch) Pressure Sensor
  *
- * Copyright (c) 2014 Kenji Arai / JH1PJL
+ * Copyright (c) 2013,'14,'17 Kenji Arai / JH1PJL
  *  http://www.page.sannet.ne.jp/kenjia/index.html
  *  http://mbed.org/users/kenjiArai/
- *      Created: August    14th, 2013   for STM32L152 
- *      Changed: May       21st, 2014   mbed LPC1114
- *      Revised: June      22nd, 2014
- *
- * 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.
+ *      Created: August     14th, 2013   for STM32L152 
+ *      Changed: May        21st, 2014   mbed LPC1114
+ *      Revised: August     23rd, 2017
  */
 /*
  *---------------- REFERENCE ----------------------------------------------------------------------
@@ -60,11 +54,15 @@
 #define B_PRES_MEASURE_OSS3     0xf4    // pressure /over sampling #3
 #define B_RESET_CMD             0xb6    // Reset chip command
 
-BMP180::BMP180 (PinName p_sda, PinName p_scl) : i2c(p_sda, p_scl) {
+BMP180::BMP180 (PinName p_sda, PinName p_scl)
+ : _i2c_p(new I2C(p_sda, p_scl)), _i2c(*_i2c_p)
+{
     init();
 }
 
-BMP180::BMP180 (I2C& p_i2c) : i2c(p_i2c) { 
+BMP180::BMP180 (I2C& p_i2c)
+ : _i2c(p_i2c)
+{ 
     init();
 }
 
@@ -95,7 +93,7 @@
     // start temprerature measurment
     baro_dt[0] = BARO_CTRL_MEAS_REG;
     baro_dt[1] = B_TEMP_MEASURE; 
-    i2c_write_n_bytes(BMP180_addr, baro_dt, 2);    
+    _i2c_write_n_bytes(BMP180_addr, baro_dt, 2);    
     wait(0.3);       // wait for convertion
 #if 0
     printf("type:0x%x\r\nac1:0x%x,ac2:0x%x,ac3:0x%x,ac4:0x%x,ac5:0x%x,ac6:0x%x\n\r",
@@ -104,8 +102,8 @@
 #endif
     // read temp.
     baro_dt[0] = BARO_ADC_OUT_MSB_REG;    
-    i2c_write_n_bytes(BMP180_addr, baro_dt, 1);
-    i2c_read_n_bytes(BMP180_addr,baro_dt,2);        // not 3 but 2 (June 14th/Debug)
+    _i2c_write_n_bytes(BMP180_addr, baro_dt, 1);
+    _i2c_read_n_bytes(BMP180_addr,baro_dt,2);        // not 3 but 2 (June 14th/Debug)
     raw_temp = baro_dt[0] << 8 | baro_dt[1];
 #if 0
     printf("temp_raw:0x%x\n\r",raw_temp);
@@ -113,12 +111,12 @@
     // start pressure measurement
     baro_dt[0] = BARO_CTRL_MEAS_REG;
     baro_dt[1] = B_PRES_MEASURE_OSS3; 
-    i2c_write_n_bytes(BMP180_addr, baro_dt, 2);
+    _i2c_write_n_bytes(BMP180_addr, baro_dt, 2);
     wait(0.3);       // wait for convertion
     // read pressure
     baro_dt[0] = BARO_ADC_OUT_MSB_REG;    
-    i2c_write_n_bytes(BMP180_addr, baro_dt, 1);
-    i2c_read_n_bytes(BMP180_addr,baro_dt,3);
+    _i2c_write_n_bytes(BMP180_addr, baro_dt, 1);
+    _i2c_read_n_bytes(BMP180_addr,baro_dt,3);
     raw_pres = ( baro_dt[0] << 16 | baro_dt[1] << 8 | baro_dt[2] ) >> (8 - 3 );
 #if 0
     printf("pres_raw:0x%x\n\r",raw_pres);
@@ -130,7 +128,7 @@
         dt_x2 = ( (int32_t)eep_mc << 11 ) / ( dt_x1 + (int32_t)eep_md );
         dt_b5 = dt_x1 + dt_x2;
     }
-    temperature = (float)( ( dt_b5 + 8 ) >> 4 )/10.0;    // temperature in 0.1 degC    
+    temperature = (float)( ( dt_b5 + 8 ) >> 4 )/10.0f;    // temperature in 0.1 degC    
     //      Pressure
     dt_b6 = dt_b5 - 4000;
     dt_x1 = ( dt_b6 * dt_b6 ) >> 12;
@@ -158,49 +156,50 @@
     dt_x2 *= -1;
     // pressure in Pa
     dx += ( dt_x1 + dt_x2 + CONST_MI ) >> 4;
-    pressure = (float)dx / 100.0;
+    pressure = (float)dx / 100.0f;
 }
 
 void BMP180::init () {
     BMP180_addr = BMP180ADDR;
     // parameters AC1-AC6
     baro_dt[0] = BARO_PROM_ADDR;
-    i2c_write_n_bytes(BMP180_addr, baro_dt, 1);
-    i2c_read_n_bytes(BMP180_addr,baro_dt,2);
+    _i2c_write_n_bytes(BMP180_addr, baro_dt, 1);
+    _i2c_read_n_bytes(BMP180_addr,baro_dt,2);
     eep_ac1 =  (baro_dt[0] << 8)  | baro_dt[1];
-    i2c_read_n_bytes(BMP180_addr,baro_dt,2);
+    _i2c_read_n_bytes(BMP180_addr,baro_dt,2);
     eep_ac2 =  (baro_dt[0] << 8)  | baro_dt[1];
-    i2c_read_n_bytes(BMP180_addr,baro_dt,2);
+    _i2c_read_n_bytes(BMP180_addr,baro_dt,2);
     eep_ac3 =  (baro_dt[0] << 8)  | baro_dt[1];
-    i2c_read_n_bytes(BMP180_addr,baro_dt,2);
+    _i2c_read_n_bytes(BMP180_addr,baro_dt,2);
     eep_ac4 =  (baro_dt[0] << 8)  | baro_dt[1];
-    i2c_read_n_bytes(BMP180_addr,baro_dt,2);
+    _i2c_read_n_bytes(BMP180_addr,baro_dt,2);
     eep_ac5 =  (baro_dt[0] << 8)  | baro_dt[1];
-    i2c_read_n_bytes(BMP180_addr,baro_dt,2);
+    _i2c_read_n_bytes(BMP180_addr,baro_dt,2);
     eep_ac6 =  (baro_dt[0] << 8)  | baro_dt[1];
     // parameters B1,B2
-    i2c_read_n_bytes(BMP180_addr,baro_dt,2);
+    _i2c_read_n_bytes(BMP180_addr,baro_dt,2);
     eep_b1 =  (baro_dt[0] << 8)  | baro_dt[1];
-    i2c_read_n_bytes(BMP180_addr,baro_dt,2);
+    _i2c_read_n_bytes(BMP180_addr,baro_dt,2);
     eep_b2 =  (baro_dt[0] << 8)  | baro_dt[1];
     // parameters MB,MC,MD
-    i2c_read_n_bytes(BMP180_addr,baro_dt,2);
+    _i2c_read_n_bytes(BMP180_addr,baro_dt,2);
     eep_mb =  (baro_dt[0] << 8)  | baro_dt[1];
-    i2c_read_n_bytes(BMP180_addr,baro_dt,2);
+    _i2c_read_n_bytes(BMP180_addr,baro_dt,2);
     eep_mc =  (baro_dt[0] << 8)  | baro_dt[1];
-    i2c_read_n_bytes(BMP180_addr,baro_dt,2);
+    _i2c_read_n_bytes(BMP180_addr,baro_dt,2);
     eep_md =  (baro_dt[0] << 8)  | baro_dt[1];
     // Read ID
     baro_dt[0] = BARO_CHIP_ID_REG;
-    i2c_write_n_bytes(BMP180_addr, baro_dt, 1);
-    i2c_read_n_bytes(BMP180_addr,baro_dt,1);
+    _i2c_write_n_bytes(BMP180_addr, baro_dt, 1);
+    _i2c_read_n_bytes(BMP180_addr,baro_dt,1);
     id_number = baro_dt[0];
 }
 
-void BMP180::i2c_read_n_bytes (int addr, char* dt, int n) {
-    i2c.read(addr, dt, n);
+void BMP180::_i2c_read_n_bytes (int addr, char* dt, int n) {
+    _i2c.read(addr, dt, n);
 }
 
-void BMP180::i2c_write_n_bytes (int addr, char* dt, int n) {
-    i2c.write(addr, dt, n);
+void BMP180::_i2c_write_n_bytes (int addr, char* dt, int n) {
+    _i2c.write(addr, dt, n);
 }
+