Yizhi Sun / Mbed 2 deprecated Temperature

Dependencies:   mbed

Committer:
oscarsun
Date:
Sun May 10 21:46:51 2015 +0000
Revision:
0:a5f38f79c701
Weather Station for temperature measuring

Who changed what in which revision?

UserRevisionLine numberNew contents of line
oscarsun 0:a5f38f79c701 1 /**
oscarsun 0:a5f38f79c701 2 @file BMP180.h
oscarsun 0:a5f38f79c701 3
oscarsun 0:a5f38f79c701 4 @brief Header file containing member functions and variables
oscarsun 0:a5f38f79c701 5
oscarsun 0:a5f38f79c701 6 */
oscarsun 0:a5f38f79c701 7
oscarsun 0:a5f38f79c701 8 #ifndef BMP180_H
oscarsun 0:a5f38f79c701 9 #define BMP180_H
oscarsun 0:a5f38f79c701 10
oscarsun 0:a5f38f79c701 11 // BMP180 address (5.2 datasheet)
oscarsun 0:a5f38f79c701 12 #define BMP180_W_ADDRESS 0xEE
oscarsun 0:a5f38f79c701 13 #define BMP180_R_ADDRESS 0xEF
oscarsun 0:a5f38f79c701 14 // Register Descriptions (4 datasheet)
oscarsun 0:a5f38f79c701 15 #define ID_REG 0xD0
oscarsun 0:a5f38f79c701 16 #define EEPROM_REG_ADD 0xAA
oscarsun 0:a5f38f79c701 17
oscarsun 0:a5f38f79c701 18 // uncomment line below to run in debug mode and compare to datasheet values
oscarsun 0:a5f38f79c701 19 //#define DEBUG
oscarsun 0:a5f38f79c701 20
oscarsun 0:a5f38f79c701 21 // Struct to store calibration data
oscarsun 0:a5f38f79c701 22 typedef struct Calibration Calibration;
oscarsun 0:a5f38f79c701 23 struct Calibration {
oscarsun 0:a5f38f79c701 24 int16_t AC1;
oscarsun 0:a5f38f79c701 25 int16_t AC2;
oscarsun 0:a5f38f79c701 26 int16_t AC3;
oscarsun 0:a5f38f79c701 27 uint16_t AC4;
oscarsun 0:a5f38f79c701 28 uint16_t AC5;
oscarsun 0:a5f38f79c701 29 uint16_t AC6;
oscarsun 0:a5f38f79c701 30 int16_t B1;
oscarsun 0:a5f38f79c701 31 int16_t B2;
oscarsun 0:a5f38f79c701 32 int16_t MB;
oscarsun 0:a5f38f79c701 33 int16_t MC;
oscarsun 0:a5f38f79c701 34 int16_t MD;
oscarsun 0:a5f38f79c701 35 };
oscarsun 0:a5f38f79c701 36
oscarsun 0:a5f38f79c701 37 // Struct for measurement (temperature and pressure)
oscarsun 0:a5f38f79c701 38 typedef struct Measurement Measurement;
oscarsun 0:a5f38f79c701 39 struct Measurement {
oscarsun 0:a5f38f79c701 40 float temperature;
oscarsun 0:a5f38f79c701 41 float pressure;
oscarsun 0:a5f38f79c701 42 };
oscarsun 0:a5f38f79c701 43
oscarsun 0:a5f38f79c701 44 #include "mbed.h"
oscarsun 0:a5f38f79c701 45
oscarsun 0:a5f38f79c701 46 /**
oscarsun 0:a5f38f79c701 47 @brief Library for interfacing with BMP180 Barometer
oscarsun 0:a5f38f79c701 48 @see https://www.bosch-sensortec.com/en/homepage/products_3/environmental_sensors_1/bmp180_1/bmp180
oscarsun 0:a5f38f79c701 49 @see https://www.sparkfun.com/products/11824
oscarsun 0:a5f38f79c701 50
oscarsun 0:a5f38f79c701 51 @brief Revision 1.0
oscarsun 0:a5f38f79c701 52
oscarsun 0:a5f38f79c701 53 @author Craig A. Evans
oscarsun 0:a5f38f79c701 54 @date March 2015
oscarsun 0:a5f38f79c701 55 *
oscarsun 0:a5f38f79c701 56 * Example:
oscarsun 0:a5f38f79c701 57 * @code
oscarsun 0:a5f38f79c701 58
oscarsun 0:a5f38f79c701 59 #include "mbed.h"
oscarsun 0:a5f38f79c701 60 #include "BMP180.h"
oscarsun 0:a5f38f79c701 61
oscarsun 0:a5f38f79c701 62 BMP180 bmp180(p28,p27); // SDA, SCL
oscarsun 0:a5f38f79c701 63 Serial serial(USBTX,USBRX);
oscarsun 0:a5f38f79c701 64
oscarsun 0:a5f38f79c701 65 int main() {
oscarsun 0:a5f38f79c701 66
oscarsun 0:a5f38f79c701 67 // initiliase barometer
oscarsun 0:a5f38f79c701 68 bmp180.init();
oscarsun 0:a5f38f79c701 69
oscarsun 0:a5f38f79c701 70 Measurement measurement; // measurement structure declared in BMP180 class
oscarsun 0:a5f38f79c701 71
oscarsun 0:a5f38f79c701 72 while(1) {
oscarsun 0:a5f38f79c701 73
oscarsun 0:a5f38f79c701 74 // read values (T in Celsius and P in mb) and print over serial port
oscarsun 0:a5f38f79c701 75 measurement = bmp180.readValues();
oscarsun 0:a5f38f79c701 76 serial.printf("T = %.2f C P = %.2f mb\n",measurement.temperature,measurement.pressure);
oscarsun 0:a5f38f79c701 77 wait(1.0); // short delau until next reading
oscarsun 0:a5f38f79c701 78
oscarsun 0:a5f38f79c701 79 }
oscarsun 0:a5f38f79c701 80 }
oscarsun 0:a5f38f79c701 81
oscarsun 0:a5f38f79c701 82
oscarsun 0:a5f38f79c701 83 * @endcode
oscarsun 0:a5f38f79c701 84 */
oscarsun 0:a5f38f79c701 85
oscarsun 0:a5f38f79c701 86 class BMP180
oscarsun 0:a5f38f79c701 87 {
oscarsun 0:a5f38f79c701 88 public:
oscarsun 0:a5f38f79c701 89
oscarsun 0:a5f38f79c701 90 /** Create a BMP180 object connected to the specified I2C pins
oscarsun 0:a5f38f79c701 91 *
oscarsun 0:a5f38f79c701 92 * @param sdaPin - mbed SDA pin
oscarsun 0:a5f38f79c701 93 * @param sclPin - mbed SCL pin
oscarsun 0:a5f38f79c701 94 *
oscarsun 0:a5f38f79c701 95 */
oscarsun 0:a5f38f79c701 96 BMP180(PinName sdaPin, PinName sclPin);
oscarsun 0:a5f38f79c701 97
oscarsun 0:a5f38f79c701 98 /** Initialise barometer - reads factory calibration data
oscarsun 0:a5f38f79c701 99 *
oscarsun 0:a5f38f79c701 100 */
oscarsun 0:a5f38f79c701 101 void init();
oscarsun 0:a5f38f79c701 102
oscarsun 0:a5f38f79c701 103 /** Read current temperature and pressure values
oscarsun 0:a5f38f79c701 104 *
oscarsun 0:a5f38f79c701 105 * @returns Measurement structure. Memebers are temperature in C (float) and pressure in mbar (float)
oscarsun 0:a5f38f79c701 106 *
oscarsun 0:a5f38f79c701 107 */
oscarsun 0:a5f38f79c701 108 Measurement readValues();
oscarsun 0:a5f38f79c701 109
oscarsun 0:a5f38f79c701 110 private:
oscarsun 0:a5f38f79c701 111 void error();
oscarsun 0:a5f38f79c701 112 int32_t readUncompensatedTemperatureValue();
oscarsun 0:a5f38f79c701 113 int32_t readUncompensatedPressureValue();
oscarsun 0:a5f38f79c701 114 int32_t calcTrueTemperature(int32_t UT);
oscarsun 0:a5f38f79c701 115 int32_t calcTruePressure(int32_t UP);
oscarsun 0:a5f38f79c701 116 void sendByteToRegister(char byte,char reg);
oscarsun 0:a5f38f79c701 117 char readByteFromRegister(char reg);
oscarsun 0:a5f38f79c701 118 void readBytesFromRegister(char reg,int numberOfBytes,char bytes[]);
oscarsun 0:a5f38f79c701 119 void readCalibrationData();
oscarsun 0:a5f38f79c701 120
oscarsun 0:a5f38f79c701 121
oscarsun 0:a5f38f79c701 122 private: // private variables
oscarsun 0:a5f38f79c701 123 I2C* i2c;
oscarsun 0:a5f38f79c701 124 BusOut* leds;
oscarsun 0:a5f38f79c701 125 Calibration calibration; // variable to store calibration data
oscarsun 0:a5f38f79c701 126 // variables for calculation
oscarsun 0:a5f38f79c701 127 int32_t X1,X2,X3,B3,B5,B6;
oscarsun 0:a5f38f79c701 128 uint32_t B4,B7;
oscarsun 0:a5f38f79c701 129 int oss; // oversampling setting
oscarsun 0:a5f38f79c701 130 };
oscarsun 0:a5f38f79c701 131
oscarsun 0:a5f38f79c701 132 #endif