Llibrary for the WiGo MPL3115A2, I2C Precision Altimeter sensor.

Dependents:   KL25Z_Batt_Test WIGO_MPL3115A2 Multi-Sensor SPACEmk2 ... more

30/05/2013 Added and tested the data acquisition using Interrupt. Added code for Altimeter trigger Interrupt but not yet tested.

Very basic library. Under development. Need to add in order: 1. IRQ configuration. 2. FIFO mode configuration.

Committer:
clemente
Date:
Thu May 23 12:42:45 2013 +0000
Revision:
1:30a04f651efe
Parent:
0:cfecfabc5e23
Child:
2:a2fcfb7ff611
Corrected the example code inside the MPL3115A2.h file.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
clemente 0:cfecfabc5e23 1 #ifndef MPL3115A2_H
clemente 0:cfecfabc5e23 2 #define MPL3115A2_H
clemente 0:cfecfabc5e23 3
clemente 0:cfecfabc5e23 4 #include "mbed.h"
clemente 0:cfecfabc5e23 5
clemente 0:cfecfabc5e23 6 /* Oversampling */
clemente 0:cfecfabc5e23 7 #define OVERSAMPLE_RATIO_1 0
clemente 0:cfecfabc5e23 8 #define OVERSAMPLE_RATIO_2 1
clemente 0:cfecfabc5e23 9 #define OVERSAMPLE_RATIO_4 2
clemente 0:cfecfabc5e23 10 #define OVERSAMPLE_RATIO_8 3
clemente 0:cfecfabc5e23 11 #define OVERSAMPLE_RATIO_16 4
clemente 0:cfecfabc5e23 12 #define OVERSAMPLE_RATIO_32 5
clemente 0:cfecfabc5e23 13 #define OVERSAMPLE_RATIO_64 6
clemente 0:cfecfabc5e23 14 #define OVERSAMPLE_RATIO_128 7
clemente 0:cfecfabc5e23 15
clemente 0:cfecfabc5e23 16 /* Mode */
clemente 0:cfecfabc5e23 17 #define ALTIMETER_MODE 1
clemente 0:cfecfabc5e23 18 #define BAROMETRIC_MODE 2
clemente 0:cfecfabc5e23 19
clemente 0:cfecfabc5e23 20 /**
clemente 0:cfecfabc5e23 21 * MPL3115A2 Altimeter example
clemente 0:cfecfabc5e23 22 *
clemente 0:cfecfabc5e23 23 * @code
clemente 0:cfecfabc5e23 24 * #include "mbed.h"
clemente 0:cfecfabc5e23 25 * #include "MPL3115A2.h"
clemente 0:cfecfabc5e23 26 *
clemente 0:cfecfabc5e23 27 * #define MPL3115A2_I2C_ADDRESS (0x60<<1)
clemente 1:30a04f651efe 28 * MPL3115A2 wigo_sensor1(PTE0, PTE1, MPL3115A2_I2C_ADDRESS);
clemente 0:cfecfabc5e23 29 * Serial pc(USBTX, USBRX);
clemente 0:cfecfabc5e23 30 *
clemente 1:30a04f651efe 31 * // pos [0] = altitude or pressure value
clemente 1:30a04f651efe 32 * // pos [1] = temperature value
clemente 1:30a04f651efe 33 * float sensor_data[2];
clemente 1:30a04f651efe 34 *
clemente 0:cfecfabc5e23 35 * int main(void) {
clemente 0:cfecfabc5e23 36 *
clemente 0:cfecfabc5e23 37 * pc.baud( 230400);
clemente 0:cfecfabc5e23 38 * pc.printf("MPL3115A2 Altimeter mode. [%d]\r\n", wigo_sensor1.getDeviceID());
clemente 0:cfecfabc5e23 39 *
clemente 0:cfecfabc5e23 40 * wigo_sensor1.Oversample_Ratio( OVERSAMPLE_RATIO_32);
clemente 0:cfecfabc5e23 41 *
clemente 0:cfecfabc5e23 42 * while(1) {
clemente 0:cfecfabc5e23 43 * //
clemente 0:cfecfabc5e23 44 * if ( wigo_sensor1.isDataAvailable()) {
clemente 0:cfecfabc5e23 45 * wigo_sensor1.getAllData( &sensor_data[0]);
clemente 1:30a04f651efe 46 * pc.printf("\tAltitude: %f\tTemperature: %f\r\n", sensor_data[0], sensor_data[1]);
clemente 0:cfecfabc5e23 47 * }
clemente 0:cfecfabc5e23 48 * //
clemente 0:cfecfabc5e23 49 * wait( 0.001);
clemente 0:cfecfabc5e23 50 * }
clemente 0:cfecfabc5e23 51 *
clemente 0:cfecfabc5e23 52 * }
clemente 0:cfecfabc5e23 53 * @endcode
clemente 0:cfecfabc5e23 54 */
clemente 0:cfecfabc5e23 55 class MPL3115A2
clemente 0:cfecfabc5e23 56 {
clemente 0:cfecfabc5e23 57 public:
clemente 0:cfecfabc5e23 58 /**
clemente 0:cfecfabc5e23 59 * MPL3115A2 constructor
clemente 0:cfecfabc5e23 60 *
clemente 0:cfecfabc5e23 61 * @param sda SDA pin
clemente 0:cfecfabc5e23 62 * @param sdl SCL pin
clemente 0:cfecfabc5e23 63 * @param addr addr of the I2C peripheral
clemente 0:cfecfabc5e23 64 */
clemente 0:cfecfabc5e23 65 MPL3115A2(PinName sda, PinName scl, int addr);
clemente 0:cfecfabc5e23 66
clemente 0:cfecfabc5e23 67 /**
clemente 0:cfecfabc5e23 68 * Get the value of the WHO_AM_I register
clemente 0:cfecfabc5e23 69 *
clemente 0:cfecfabc5e23 70 * @returns DEVICE_ID value == 0xC4
clemente 0:cfecfabc5e23 71 */
clemente 0:cfecfabc5e23 72 uint8_t getDeviceID();
clemente 0:cfecfabc5e23 73
clemente 0:cfecfabc5e23 74 /**
clemente 0:cfecfabc5e23 75 * Return the STATUS register value
clemente 0:cfecfabc5e23 76 *
clemente 0:cfecfabc5e23 77 * @returns STATUS register value
clemente 0:cfecfabc5e23 78 */
clemente 0:cfecfabc5e23 79 unsigned char getStatus( void);
clemente 0:cfecfabc5e23 80
clemente 0:cfecfabc5e23 81 /**
clemente 0:cfecfabc5e23 82 * Get the altimeter value
clemente 0:cfecfabc5e23 83 *
clemente 0:cfecfabc5e23 84 * @returns altimeter value as float
clemente 0:cfecfabc5e23 85 */
clemente 0:cfecfabc5e23 86 float getAltimeter( void);
clemente 0:cfecfabc5e23 87
clemente 0:cfecfabc5e23 88 /**
clemente 0:cfecfabc5e23 89 * Get the pressure value
clemente 0:cfecfabc5e23 90 *
clemente 0:cfecfabc5e23 91 * @returns pressure value as float
clemente 0:cfecfabc5e23 92 */
clemente 0:cfecfabc5e23 93 float getPressure( void);
clemente 0:cfecfabc5e23 94
clemente 0:cfecfabc5e23 95 /**
clemente 0:cfecfabc5e23 96 * Get the temperature value
clemente 0:cfecfabc5e23 97 *
clemente 0:cfecfabc5e23 98 * @returns temperature value as float
clemente 0:cfecfabc5e23 99 */
clemente 0:cfecfabc5e23 100 float getTemperature( void);
clemente 0:cfecfabc5e23 101
clemente 0:cfecfabc5e23 102 /**
clemente 0:cfecfabc5e23 103 * Set the Altimeter Mode
clemente 0:cfecfabc5e23 104 *
clemente 0:cfecfabc5e23 105 * @returns none
clemente 0:cfecfabc5e23 106 */
clemente 0:cfecfabc5e23 107 void Altimeter_Mode( void);
clemente 0:cfecfabc5e23 108
clemente 0:cfecfabc5e23 109 /**
clemente 0:cfecfabc5e23 110 * Set the Barometric Mode
clemente 0:cfecfabc5e23 111 *
clemente 0:cfecfabc5e23 112 * @returns none
clemente 0:cfecfabc5e23 113 */
clemente 0:cfecfabc5e23 114 void Barometric_Mode( void);
clemente 0:cfecfabc5e23 115
clemente 0:cfecfabc5e23 116 /**
clemente 0:cfecfabc5e23 117 * Get the altimeter, pressure and temperature values
clemente 0:cfecfabc5e23 118 *
clemente 0:cfecfabc5e23 119 * @param array of float f[3]
clemente 0:cfecfabc5e23 120 * @returns none
clemente 0:cfecfabc5e23 121 */
clemente 0:cfecfabc5e23 122 void getAllData( float *f);
clemente 0:cfecfabc5e23 123
clemente 0:cfecfabc5e23 124 /** Return is there are date available
clemente 0:cfecfabc5e23 125 *
clemente 0:cfecfabc5e23 126 * @return 1 for data available, 0 for no data available
clemente 0:cfecfabc5e23 127 */
clemente 0:cfecfabc5e23 128 unsigned int isDataAvailable( void);
clemente 0:cfecfabc5e23 129
clemente 0:cfecfabc5e23 130 /** Set the oversampling rate value
clemente 0:cfecfabc5e23 131 *
clemente 0:cfecfabc5e23 132 * @param oversampling values. See MPL3115A2.h
clemente 0:cfecfabc5e23 133 * @return none
clemente 0:cfecfabc5e23 134 */
clemente 0:cfecfabc5e23 135 void Oversample_Ratio( unsigned int ratio);
clemente 0:cfecfabc5e23 136
clemente 0:cfecfabc5e23 137 private:
clemente 0:cfecfabc5e23 138 I2C m_i2c;
clemente 0:cfecfabc5e23 139 int m_addr;
clemente 0:cfecfabc5e23 140 unsigned char MPL3115A2_mode;
clemente 0:cfecfabc5e23 141 unsigned char MPL3115A2_oversampling;
clemente 0:cfecfabc5e23 142
clemente 0:cfecfabc5e23 143 /** Set the device in active mode
clemente 0:cfecfabc5e23 144 */
clemente 0:cfecfabc5e23 145 void Active( void);
clemente 0:cfecfabc5e23 146
clemente 0:cfecfabc5e23 147 /** Set the device in standby mode
clemente 0:cfecfabc5e23 148 */
clemente 0:cfecfabc5e23 149 void Standby( void);
clemente 0:cfecfabc5e23 150
clemente 0:cfecfabc5e23 151 void readRegs(int addr, uint8_t * data, int len);
clemente 0:cfecfabc5e23 152 void writeRegs(uint8_t * data, int len);
clemente 0:cfecfabc5e23 153
clemente 0:cfecfabc5e23 154 };
clemente 0:cfecfabc5e23 155
clemente 0:cfecfabc5e23 156 #endif