mbed MPL115A1 (Barometric Pressure Sensor) Library

Dependents:   MPL115A1_HelloWorld

Committer:
mk
Date:
Tue Apr 17 15:35:24 2012 +0000
Revision:
1:b2adf1b62898
Parent:
0:f8ee2a5e377a

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mk 0:f8ee2a5e377a 1 #ifndef MPL115A1_H
mk 0:f8ee2a5e377a 2 #define MPL115A1_H
mk 0:f8ee2a5e377a 3
mk 0:f8ee2a5e377a 4 #include "mbed.h"
mk 0:f8ee2a5e377a 5
mk 0:f8ee2a5e377a 6 /** barometric pressure and temperature sensor MPL115A1 control class, based on SPI
mk 0:f8ee2a5e377a 7 *
mk 0:f8ee2a5e377a 8 * Example:
mk 0:f8ee2a5e377a 9 * @code
mk 0:f8ee2a5e377a 10 * #include "mbed.h"
mk 0:f8ee2a5e377a 11 * #include "MPL115A1.h"
mk 0:f8ee2a5e377a 12 *
mk 0:f8ee2a5e377a 13 * SPI spi(p11,p12,p13);
mk 0:f8ee2a5e377a 14 * MPL115A1 bar(spi, p14);
mk 0:f8ee2a5e377a 15 *
mk 0:f8ee2a5e377a 16 * Serial pc(USBTX, USBRX);
mk 0:f8ee2a5e377a 17 *
mk 0:f8ee2a5e377a 18 * int main() {
mk 0:f8ee2a5e377a 19 * while(1) {
mk 0:f8ee2a5e377a 20 * wait(10);
mk 0:f8ee2a5e377a 21 * pc.printf("Pressure is %f\n", bar.readPressure());
mk 0:f8ee2a5e377a 22 * pc.printf("Temperature is %f\n", bar.readTemperature());
mk 0:f8ee2a5e377a 23 * }
mk 0:f8ee2a5e377a 24 * }
mk 0:f8ee2a5e377a 25 * @endcode
mk 0:f8ee2a5e377a 26 */
mk 0:f8ee2a5e377a 27
mk 0:f8ee2a5e377a 28 // real addresses, in read_register: address |= 0x80
mk 0:f8ee2a5e377a 29 #define MPL115A1_PRESH 0x00 // 80
mk 0:f8ee2a5e377a 30 #define MPL115A1_PRESL 0x02 // 82
mk 0:f8ee2a5e377a 31 #define MPL115A1_TEMPH 0x04 // 84
mk 0:f8ee2a5e377a 32 #define MPL115A1_TEMPL 0x06 // 86
mk 0:f8ee2a5e377a 33
mk 0:f8ee2a5e377a 34 #define MPL115A1_A0MSB 0x08 // 88
mk 0:f8ee2a5e377a 35 #define MPL115A1_A0LSB 0x0A // 8A
mk 0:f8ee2a5e377a 36 #define MPL115A1_B1MSB 0x0C // 8C
mk 0:f8ee2a5e377a 37 #define MPL115A1_B1LSB 0x0E // 8E
mk 0:f8ee2a5e377a 38 #define MPL115A1_B2MSB 0x10 // 90
mk 0:f8ee2a5e377a 39 #define MPL115A1_B2LSB 0x12 // 92
mk 0:f8ee2a5e377a 40 #define MPL115A1_C12MSB 0x14 // 94
mk 0:f8ee2a5e377a 41 #define MPL115A1_C12LSB 0x16 // 96
mk 0:f8ee2a5e377a 42 #define MPL115A1_C11MSB 0x18 // 98
mk 0:f8ee2a5e377a 43 #define MPL115A1_C11LSB 0x1A // 9A
mk 0:f8ee2a5e377a 44 #define MPL115A1_C22MSB 0x1C // 9C
mk 0:f8ee2a5e377a 45 #define MPL115A1_C22LSB 0x1E // 9E
mk 0:f8ee2a5e377a 46
mk 0:f8ee2a5e377a 47 #define MPL115A1_STARTPRES 0x20 // start pressure measurement
mk 0:f8ee2a5e377a 48 #define MPL115A1_STARTTEMP 0x22 // start temperature measurement
mk 0:f8ee2a5e377a 49 #define MPL115A1_STARTBOTH 0x24 // start both simultaneously
mk 0:f8ee2a5e377a 50
mk 0:f8ee2a5e377a 51 class MPL115A1 {
mk 0:f8ee2a5e377a 52 private:
mk 0:f8ee2a5e377a 53 SPI& _spi;
mk 0:f8ee2a5e377a 54 DigitalOut _cs; // chip select, active low
mk 0:f8ee2a5e377a 55 //DigitalOut sdn; // shutdown pin, high=on, low=off
mk 0:f8ee2a5e377a 56
mk 0:f8ee2a5e377a 57 public:
mk 1:b2adf1b62898 58 /** Create a barometer object connected to the SPI bus and specified chip select pin
mk 1:b2adf1b62898 59 *
mk 1:b2adf1b62898 60 * @param spi SPI master object
mk 1:b2adf1b62898 61 * @param ncs chip select pin
mk 1:b2adf1b62898 62 */
mk 0:f8ee2a5e377a 63 MPL115A1(SPI& spi, PinName ncs);
mk 1:b2adf1b62898 64 /** start measurement, read registers, calculate and return pressure */
mk 0:f8ee2a5e377a 65 float readPressure();
mk 1:b2adf1b62898 66 /** start measurement, read registers, calculate and return temperature */
mk 0:f8ee2a5e377a 67 float readTemperature();
mk 0:f8ee2a5e377a 68
mk 0:f8ee2a5e377a 69 private:
mk 0:f8ee2a5e377a 70 void write_register(uint8_t address, char data);
mk 0:f8ee2a5e377a 71 char read_register(uint8_t address);
mk 0:f8ee2a5e377a 72
mk 0:f8ee2a5e377a 73 signed char sia0MSB, sia0LSB;
mk 0:f8ee2a5e377a 74 signed char sib1MSB, sib1LSB;
mk 0:f8ee2a5e377a 75 signed char sib2MSB, sib2LSB;
mk 0:f8ee2a5e377a 76 signed char sic12MSB, sic12LSB;
mk 0:f8ee2a5e377a 77 signed char sic11MSB, sic11LSB;
mk 0:f8ee2a5e377a 78 signed char sic22MSB, sic22LSB;
mk 0:f8ee2a5e377a 79 signed int sia0, sib1, sib2, sic12, sic11, sic22, siPcomp;
mk 0:f8ee2a5e377a 80 float decPcomp;
mk 0:f8ee2a5e377a 81 signed long lt1, lt2, lt3, si_c11x1, si_a11, si_c12x2;
mk 0:f8ee2a5e377a 82 signed long si_a1, si_c22x2, si_a2, si_a1x1, si_y1, si_a2x2;
mk 0:f8ee2a5e377a 83 unsigned int uiPadc, uiTadc;
mk 0:f8ee2a5e377a 84 unsigned char uiPH, uiPL, uiTH, uiTL;
mk 0:f8ee2a5e377a 85 };
mk 0:f8ee2a5e377a 86
mk 0:f8ee2a5e377a 87 #endif