Leon Wehmeier / Mbed OS fiasco_max32630

Dependencies:   SoftSerial MAX14690 Buffer

Fork of rtos_threading_with_callback by mbed_example

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?

UserRevisionLine numberNew 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