Class for using BMP180 Bosch Pressure sensor

Dependents:   ILI9341_Clock_Nucleo IoT-Polytech-Upmc

Revision:
0:b899fe37ce17
Child:
1:4c6b41f1203d
diff -r 000000000000 -r b899fe37ce17 BMP180.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BMP180.h	Tue Nov 26 05:40:44 2013 +0000
@@ -0,0 +1,107 @@
+#ifndef BMP180_H
+#define BMP180_H
+
+/* BMP180 Digital Pressure Sensor Class for use with Mbed LPC1768 and other platforms
+*  BMP180 from Bosch Sensortec
+*  Copyright (c) 2013 Philip King Smith
+*
+* 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.
+*/
+
+/** BMP180 Digital Pressure Sensor class using mbed's i2c class
+ *
+ * Example:
+ * @code
+ * // show how the BMP180 class works
+ * #include "BMP180.h"
+ * #include "mbed.h"
+ *
+ * Serial pc(USBTX, USBRX); // tx, rx  for debug and usb pc comunications
+ *
+ *
+ * @endcode
+ */
+
+#include "mbed.h"
+
+#define EEprom 22           // The EEPROM has 176bits of calibration data (176/8 = 22 Bytes)
+#define BMP180ADDR 0xEF     // I2C address of BMP180 device
+#define BMP180FREQ 1000000   // Data sheet says 3.4 MHz is max but not sure what mbed can do here!
+#define CMD_READ_VALUE 0xF6
+#define CMD_READ_CALIBRATION 0xAA
+#define OVERSAMPLING_ULTRA_LOW_POWER 0
+#define OVERSAMPLING_STANDARD 1
+#define OVERSAMPLING_HIGH_RESOLUTION 2
+#define OVERSAMPLING_ULTRA_HIGH_RESOLUTION 3
+
+class BMP180
+{
+public:
+    /** Create object connected to BMP180 pins ( remember both pins need pull up resisters)
+        *
+        * Ensure the pull up resistors are used on these pins.  Also note there is no checking on
+        *  if you use thes pins p9, p10, p27, p28 so ensure you only use these ones on the LPC1768 device
+        *
+        * @param sda pin that DS1307 connected to (p9 or p28 as defined on LPC1768)
+        * @param slc pin that DS1307 connected to (p10 or p27 ad defined on LPC1768)
+        */
+    BMP180(PinName sda, PinName slc);  // Constructor
+
+    ~BMP180();          // Destructor
+
+    int readTP(long *t, long *p, int oversample);    // get both temperature and pressure fully compensated values! Note this only returns when measurements are complete
+
+    int startTemperature();             // Start temperature measurement
+    int readTemperature(long *t);       // Get the temperature reading that was taken in startTemperature() but ensure 4.5 ms time has elapsed
+    int startPressure(int oversample);  // Start pressure measurement!  Note oversample will vary the time to complete this measurement. See defines above for oversampling constants to use!
+    int readPressure(long *p);          // Get the pressure reading that was taken in startPressure() but ensure time for the measurement to complete
+
+protected:
+    long x1;
+    long x2;
+    long x3;
+    short ac1;
+    short ac2;
+    short ac3;
+    unsigned short ac4;
+    unsigned short ac5;
+    unsigned short ac6;
+    short b1;
+    short b2;
+    long b3;
+    unsigned long b4;
+    long b5;
+    long b6;
+    unsigned long b7;
+    short mb;
+    short mc;
+    short md;
+    int oversampling_setting;
+    char rReg[3];
+    char wReg[2];
+    char cmd;
+    char data[EEprom];
+    char w[2];
+
+    I2C bmp180i2c;              // the I2C class for this bmp180 communication.
+    //int rTemp(long *ut);        // raw temperature reading. Note this returns when reading is done.
+    //int rPressure(long *up);    // raw pressure reading. Note this returns when reading is done.
+};
+
+#endif
\ No newline at end of file