Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SoftSerial MAX14690 Buffer
Fork of rtos_threading_with_callback by
BMP180/BMP180.h@2:bf699e054b34, 2018-02-25 (annotated)
- Committer:
- lwehmeier
- Date:
- Sun Feb 25 16:40:28 2018 +0000
- Revision:
- 2:bf699e054b34
changed to modular design; rtos support; BMI160, BMP180, SSD1306, MPU6050, DHT11, SD support implemented; bit stuffing for link layer implemented; priority queue for data transmission; high-priority SPI link layer output thread
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| lwehmeier | 2:bf699e054b34 | 1 | /* |
| lwehmeier | 2:bf699e054b34 | 2 | @file BMP180.h |
| lwehmeier | 2:bf699e054b34 | 3 | |
| lwehmeier | 2:bf699e054b34 | 4 | @brief Barometric Pressure and Temperature Sensor BMP180 Breakout I2C Library |
| lwehmeier | 2:bf699e054b34 | 5 | |
| lwehmeier | 2:bf699e054b34 | 6 | @Author spiridion (http://mailme.spiridion.net) |
| lwehmeier | 2:bf699e054b34 | 7 | |
| lwehmeier | 2:bf699e054b34 | 8 | Tested on LPC1768 and FRDM-KL25Z |
| lwehmeier | 2:bf699e054b34 | 9 | |
| lwehmeier | 2:bf699e054b34 | 10 | Copyright (c) 2014 spiridion |
| lwehmeier | 2:bf699e054b34 | 11 | Released under the MIT License (see http://mbed.org/license/mit) |
| lwehmeier | 2:bf699e054b34 | 12 | |
| lwehmeier | 2:bf699e054b34 | 13 | Documentation regarding the BMP180 can be found here: |
| lwehmeier | 2:bf699e054b34 | 14 | http://mbed.org/media/uploads/spiridion/bst-bmp180-ds000-09.pdf |
| lwehmeier | 2:bf699e054b34 | 15 | */ |
| lwehmeier | 2:bf699e054b34 | 16 | |
| lwehmeier | 2:bf699e054b34 | 17 | #ifndef BMP180_H |
| lwehmeier | 2:bf699e054b34 | 18 | #define BMP180_H |
| lwehmeier | 2:bf699e054b34 | 19 | |
| lwehmeier | 2:bf699e054b34 | 20 | #include "mbed.h" |
| lwehmeier | 2:bf699e054b34 | 21 | |
| lwehmeier | 2:bf699e054b34 | 22 | /// default address is 0xEF |
| lwehmeier | 2:bf699e054b34 | 23 | #define BMP180_I2C_ADDRESS 0xEF |
| lwehmeier | 2:bf699e054b34 | 24 | |
| lwehmeier | 2:bf699e054b34 | 25 | // Oversampling settings |
| lwehmeier | 2:bf699e054b34 | 26 | #define BMP180_OSS_ULTRA_LOW_POWER 0 // 1 sample and 4.5ms for conversion |
| lwehmeier | 2:bf699e054b34 | 27 | #define BMP180_OSS_NORMAL 1 // 2 samples and 7.5ms for conversion |
| lwehmeier | 2:bf699e054b34 | 28 | #define BMP180_OSS_HIGH_RESOLUTION 2 // 4 samples and 13.5ms for conversion |
| lwehmeier | 2:bf699e054b34 | 29 | #define BMP180_OSS_ULTRA_HIGH_RESOLUTION 3 // 8 samples and 25.5ms for conversion |
| lwehmeier | 2:bf699e054b34 | 30 | |
| lwehmeier | 2:bf699e054b34 | 31 | #define UNSET_BMP180_PRESSURE_VALUE 0.F |
| lwehmeier | 2:bf699e054b34 | 32 | #define UNSET_BMP180_TEMPERATURE_VALUE -273.15F // absolute zero |
| lwehmeier | 2:bf699e054b34 | 33 | |
| lwehmeier | 2:bf699e054b34 | 34 | /** BMP180 class. |
| lwehmeier | 2:bf699e054b34 | 35 | * Read Pressure and temperature from the BMP180 Breakout I2C sensor |
| lwehmeier | 2:bf699e054b34 | 36 | * |
| lwehmeier | 2:bf699e054b34 | 37 | * Example: |
| lwehmeier | 2:bf699e054b34 | 38 | * @code |
| lwehmeier | 2:bf699e054b34 | 39 | * #include "mbed.h" |
| lwehmeier | 2:bf699e054b34 | 40 | * #include "BMP180.h" |
| lwehmeier | 2:bf699e054b34 | 41 | * |
| lwehmeier | 2:bf699e054b34 | 42 | * #if defined(TARGET_LPC1768) |
| lwehmeier | 2:bf699e054b34 | 43 | * #define PIN_SDA p9 |
| lwehmeier | 2:bf699e054b34 | 44 | * #define PIN_SCL p10 |
| lwehmeier | 2:bf699e054b34 | 45 | * #elif defined(TARGET_KL25Z) // watch out for the PTE0/PTE1 mixed up in the KL25Z doc |
| lwehmeier | 2:bf699e054b34 | 46 | * #define PIN_SDA PTE0 |
| lwehmeier | 2:bf699e054b34 | 47 | * #define PIN_SCL PTE1 |
| lwehmeier | 2:bf699e054b34 | 48 | * #endif |
| lwehmeier | 2:bf699e054b34 | 49 | * |
| lwehmeier | 2:bf699e054b34 | 50 | * int main() |
| lwehmeier | 2:bf699e054b34 | 51 | * { |
| lwehmeier | 2:bf699e054b34 | 52 | * BMP180 bmp180(PIN_SDA, PIN_SCL); |
| lwehmeier | 2:bf699e054b34 | 53 | * float pressure, temperature; |
| lwehmeier | 2:bf699e054b34 | 54 | * |
| lwehmeier | 2:bf699e054b34 | 55 | * // bmp180.Initialize(); // no altitude compensation and normal oversampling |
| lwehmeier | 2:bf699e054b34 | 56 | * bmp180.Initialize(64, BMP180_OSS_ULTRA_LOW_POWER); // 64m altitude compensation and low power oversampling |
| lwehmeier | 2:bf699e054b34 | 57 | * |
| lwehmeier | 2:bf699e054b34 | 58 | * while(1) |
| lwehmeier | 2:bf699e054b34 | 59 | * { |
| lwehmeier | 2:bf699e054b34 | 60 | * if (bmp180.ReadData(&pressure, &temperature)) |
| lwehmeier | 2:bf699e054b34 | 61 | * printf("Pressure(hPa): %8.2f \t Temperature(C): %8.2f\n", pressure, temperature); |
| lwehmeier | 2:bf699e054b34 | 62 | * wait(1); |
| lwehmeier | 2:bf699e054b34 | 63 | * } |
| lwehmeier | 2:bf699e054b34 | 64 | * } |
| lwehmeier | 2:bf699e054b34 | 65 | * @endcode |
| lwehmeier | 2:bf699e054b34 | 66 | */ |
| lwehmeier | 2:bf699e054b34 | 67 | class BMP180 |
| lwehmeier | 2:bf699e054b34 | 68 | { |
| lwehmeier | 2:bf699e054b34 | 69 | |
| lwehmeier | 2:bf699e054b34 | 70 | public: |
| lwehmeier | 2:bf699e054b34 | 71 | |
| lwehmeier | 2:bf699e054b34 | 72 | /** Create a BMP180 instance |
| lwehmeier | 2:bf699e054b34 | 73 | * @param i2c object |
| lwehmeier | 2:bf699e054b34 | 74 | * @param address: I2C slave address |
| lwehmeier | 2:bf699e054b34 | 75 | */ |
| lwehmeier | 2:bf699e054b34 | 76 | BMP180(I2C *i2c, int address = BMP180_I2C_ADDRESS); |
| lwehmeier | 2:bf699e054b34 | 77 | |
| lwehmeier | 2:bf699e054b34 | 78 | /** Initialization: set member values and read BMP180 calibration parameters |
| lwehmeier | 2:bf699e054b34 | 79 | * @param altitude (in meter) |
| lwehmeier | 2:bf699e054b34 | 80 | * @param overSamplingSetting |
| lwehmeier | 2:bf699e054b34 | 81 | */ |
| lwehmeier | 2:bf699e054b34 | 82 | int Initialize(float altitude = 0.F, int overSamplingSetting = BMP180_OSS_NORMAL); |
| lwehmeier | 2:bf699e054b34 | 83 | |
| lwehmeier | 2:bf699e054b34 | 84 | /** Read pressure and temperature from the BMP180. |
| lwehmeier | 2:bf699e054b34 | 85 | * @param pressure (hPa) |
| lwehmeier | 2:bf699e054b34 | 86 | * @param temperature (C) |
| lwehmeier | 2:bf699e054b34 | 87 | * @returns |
| lwehmeier | 2:bf699e054b34 | 88 | * 1 on success, |
| lwehmeier | 2:bf699e054b34 | 89 | * 0 on error |
| lwehmeier | 2:bf699e054b34 | 90 | */ |
| lwehmeier | 2:bf699e054b34 | 91 | int ReadData(float* pTemperature = NULL, float* pPressure = NULL); |
| lwehmeier | 2:bf699e054b34 | 92 | double ReadAltitude(double sealevelPressure=1029.5); |
| lwehmeier | 2:bf699e054b34 | 93 | /** Get temperature from a previous measurement |
| lwehmeier | 2:bf699e054b34 | 94 | * |
| lwehmeier | 2:bf699e054b34 | 95 | * @returns |
| lwehmeier | 2:bf699e054b34 | 96 | * temperature (C) |
| lwehmeier | 2:bf699e054b34 | 97 | */ |
| lwehmeier | 2:bf699e054b34 | 98 | float GetTemperature() {return m_temperature;}; |
| lwehmeier | 2:bf699e054b34 | 99 | |
| lwehmeier | 2:bf699e054b34 | 100 | /** Get pressure from a previous measurement |
| lwehmeier | 2:bf699e054b34 | 101 | * |
| lwehmeier | 2:bf699e054b34 | 102 | * @returns |
| lwehmeier | 2:bf699e054b34 | 103 | * pressure (hPa) |
| lwehmeier | 2:bf699e054b34 | 104 | */ |
| lwehmeier | 2:bf699e054b34 | 105 | float GetPressure() {return m_pressure;}; |
| lwehmeier | 2:bf699e054b34 | 106 | |
| lwehmeier | 2:bf699e054b34 | 107 | protected: |
| lwehmeier | 2:bf699e054b34 | 108 | |
| lwehmeier | 2:bf699e054b34 | 109 | /** Perform temperature measurement |
| lwehmeier | 2:bf699e054b34 | 110 | * |
| lwehmeier | 2:bf699e054b34 | 111 | * @returns |
| lwehmeier | 2:bf699e054b34 | 112 | * temperature (C) |
| lwehmeier | 2:bf699e054b34 | 113 | */ |
| lwehmeier | 2:bf699e054b34 | 114 | int ReadRawTemperature(long* pUt); |
| lwehmeier | 2:bf699e054b34 | 115 | |
| lwehmeier | 2:bf699e054b34 | 116 | /** Perform pressure measurement |
| lwehmeier | 2:bf699e054b34 | 117 | * |
| lwehmeier | 2:bf699e054b34 | 118 | * @returns |
| lwehmeier | 2:bf699e054b34 | 119 | * temperature (C) |
| lwehmeier | 2:bf699e054b34 | 120 | */ |
| lwehmeier | 2:bf699e054b34 | 121 | int ReadRawPressure(long* pUp); |
| lwehmeier | 2:bf699e054b34 | 122 | |
| lwehmeier | 2:bf699e054b34 | 123 | /** Calculation of the temperature from the digital output |
| lwehmeier | 2:bf699e054b34 | 124 | */ |
| lwehmeier | 2:bf699e054b34 | 125 | float TrueTemperature(long ut); |
| lwehmeier | 2:bf699e054b34 | 126 | |
| lwehmeier | 2:bf699e054b34 | 127 | /** Calculation of the pressure from the digital output |
| lwehmeier | 2:bf699e054b34 | 128 | */ |
| lwehmeier | 2:bf699e054b34 | 129 | float TruePressure(long up); |
| lwehmeier | 2:bf699e054b34 | 130 | |
| lwehmeier | 2:bf699e054b34 | 131 | int m_oss; |
| lwehmeier | 2:bf699e054b34 | 132 | float m_temperature; |
| lwehmeier | 2:bf699e054b34 | 133 | float m_pressure; |
| lwehmeier | 2:bf699e054b34 | 134 | float m_altitude; |
| lwehmeier | 2:bf699e054b34 | 135 | |
| lwehmeier | 2:bf699e054b34 | 136 | I2C *m_i2c; |
| lwehmeier | 2:bf699e054b34 | 137 | int m_addr; |
| lwehmeier | 2:bf699e054b34 | 138 | char m_data[4]; |
| lwehmeier | 2:bf699e054b34 | 139 | |
| lwehmeier | 2:bf699e054b34 | 140 | short ac1, ac2, ac3; |
| lwehmeier | 2:bf699e054b34 | 141 | unsigned short ac4, ac5, ac6; |
| lwehmeier | 2:bf699e054b34 | 142 | short b1, b2; |
| lwehmeier | 2:bf699e054b34 | 143 | short mb, mc, md; |
| lwehmeier | 2:bf699e054b34 | 144 | long x1, x2, x3, b3, b5, b6; |
| lwehmeier | 2:bf699e054b34 | 145 | unsigned long b4, b7; |
| lwehmeier | 2:bf699e054b34 | 146 | |
| lwehmeier | 2:bf699e054b34 | 147 | }; |
| lwehmeier | 2:bf699e054b34 | 148 | |
| lwehmeier | 2:bf699e054b34 | 149 | #endif |
