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.
Fork of MPL3115A2 by
MPL3115A2.h@5:9edec5ee8bf4, 2013-08-22 (annotated)
- Committer:
- clemente
- Date:
- Thu Aug 22 12:03:19 2013 +0000
- Revision:
- 5:9edec5ee8bf4
- Parent:
- 4:fdf14a259af8
- Child:
- 6:03c24251e500
Added function to read raw data in polling mode. Minor change.
Who changed what in which revision?
User | Revision | Line number | New 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 | 3:a2f1752add9a | 6 | // Oversampling value and minimum time between sample |
clemente | 3:a2f1752add9a | 7 | #define OVERSAMPLE_RATIO_1 0 // 6 ms |
clemente | 3:a2f1752add9a | 8 | #define OVERSAMPLE_RATIO_2 1 // 10 ms |
clemente | 3:a2f1752add9a | 9 | #define OVERSAMPLE_RATIO_4 2 // 18 ms |
clemente | 3:a2f1752add9a | 10 | #define OVERSAMPLE_RATIO_8 3 // 34 ms |
clemente | 3:a2f1752add9a | 11 | #define OVERSAMPLE_RATIO_16 4 // 66 ms |
clemente | 3:a2f1752add9a | 12 | #define OVERSAMPLE_RATIO_32 5 // 130 ms |
clemente | 3:a2f1752add9a | 13 | #define OVERSAMPLE_RATIO_64 6 // 258 ms |
clemente | 3:a2f1752add9a | 14 | #define OVERSAMPLE_RATIO_128 7 // 512 ms |
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 | 2:a2fcfb7ff611 | 58 | /** |
clemente | 2:a2fcfb7ff611 | 59 | * MPL3115A2 constructor |
clemente | 2:a2fcfb7ff611 | 60 | * |
clemente | 2:a2fcfb7ff611 | 61 | * @param sda SDA pin |
clemente | 2:a2fcfb7ff611 | 62 | * @param sdl SCL pin |
clemente | 2:a2fcfb7ff611 | 63 | * @param addr addr of the I2C peripheral |
clemente | 2:a2fcfb7ff611 | 64 | */ |
clemente | 2:a2fcfb7ff611 | 65 | MPL3115A2(PinName sda, PinName scl, int addr); |
clemente | 2:a2fcfb7ff611 | 66 | |
clemente | 2:a2fcfb7ff611 | 67 | /** |
clemente | 2:a2fcfb7ff611 | 68 | * Get the value of the WHO_AM_I register |
clemente | 2:a2fcfb7ff611 | 69 | * |
clemente | 2:a2fcfb7ff611 | 70 | * @returns DEVICE_ID value == 0xC4 |
clemente | 2:a2fcfb7ff611 | 71 | */ |
clemente | 2:a2fcfb7ff611 | 72 | uint8_t getDeviceID(); |
clemente | 2:a2fcfb7ff611 | 73 | |
clemente | 2:a2fcfb7ff611 | 74 | /** |
clemente | 2:a2fcfb7ff611 | 75 | * Return the STATUS register value |
clemente | 2:a2fcfb7ff611 | 76 | * |
clemente | 2:a2fcfb7ff611 | 77 | * @returns STATUS register value |
clemente | 2:a2fcfb7ff611 | 78 | */ |
clemente | 2:a2fcfb7ff611 | 79 | unsigned char getStatus( void); |
clemente | 2:a2fcfb7ff611 | 80 | |
clemente | 2:a2fcfb7ff611 | 81 | /** |
clemente | 2:a2fcfb7ff611 | 82 | * Get the altimeter value |
clemente | 2:a2fcfb7ff611 | 83 | * |
clemente | 2:a2fcfb7ff611 | 84 | * @returns altimeter value as float |
clemente | 2:a2fcfb7ff611 | 85 | */ |
clemente | 2:a2fcfb7ff611 | 86 | float getAltimeter( void); |
clemente | 5:9edec5ee8bf4 | 87 | |
clemente | 5:9edec5ee8bf4 | 88 | /** |
clemente | 5:9edec5ee8bf4 | 89 | * Get the altimeter value in raw mode |
clemente | 5:9edec5ee8bf4 | 90 | * |
clemente | 5:9edec5ee8bf4 | 91 | * @param dt pointer to unsigned char array |
clemente | 5:9edec5ee8bf4 | 92 | * @returns status as 1 |
clemente | 5:9edec5ee8bf4 | 93 | */ |
clemente | 5:9edec5ee8bf4 | 94 | unsigned int getAltimeterRaw( unsigned char *dt); |
clemente | 2:a2fcfb7ff611 | 95 | |
clemente | 2:a2fcfb7ff611 | 96 | /** |
clemente | 2:a2fcfb7ff611 | 97 | * Get the pressure value |
clemente | 2:a2fcfb7ff611 | 98 | * |
clemente | 2:a2fcfb7ff611 | 99 | * @returns pressure value as float |
clemente | 2:a2fcfb7ff611 | 100 | */ |
clemente | 2:a2fcfb7ff611 | 101 | float getPressure( void); |
clemente | 5:9edec5ee8bf4 | 102 | |
clemente | 5:9edec5ee8bf4 | 103 | /** |
clemente | 5:9edec5ee8bf4 | 104 | * Get the pressure value in raw mode |
clemente | 5:9edec5ee8bf4 | 105 | * |
clemente | 5:9edec5ee8bf4 | 106 | * @param dt pointer to unsigned char array |
clemente | 5:9edec5ee8bf4 | 107 | * @returns status as 1 |
clemente | 5:9edec5ee8bf4 | 108 | */ |
clemente | 5:9edec5ee8bf4 | 109 | unsigned int getPressureRaw( unsigned char *dt); |
clemente | 2:a2fcfb7ff611 | 110 | |
clemente | 2:a2fcfb7ff611 | 111 | /** |
clemente | 2:a2fcfb7ff611 | 112 | * Get the temperature value |
clemente | 2:a2fcfb7ff611 | 113 | * |
clemente | 2:a2fcfb7ff611 | 114 | * @returns temperature value as float |
clemente | 2:a2fcfb7ff611 | 115 | */ |
clemente | 2:a2fcfb7ff611 | 116 | float getTemperature( void); |
clemente | 5:9edec5ee8bf4 | 117 | |
clemente | 5:9edec5ee8bf4 | 118 | /** |
clemente | 5:9edec5ee8bf4 | 119 | * Get the temperature value in raw mode |
clemente | 5:9edec5ee8bf4 | 120 | * |
clemente | 5:9edec5ee8bf4 | 121 | * @param dt pointer to unsigned char array |
clemente | 5:9edec5ee8bf4 | 122 | * @returns status as 1 |
clemente | 5:9edec5ee8bf4 | 123 | */ |
clemente | 5:9edec5ee8bf4 | 124 | unsigned int getTemperatureRaw( unsigned char *dt); |
clemente | 2:a2fcfb7ff611 | 125 | |
clemente | 2:a2fcfb7ff611 | 126 | /** |
clemente | 2:a2fcfb7ff611 | 127 | * Set the Altimeter Mode |
clemente | 2:a2fcfb7ff611 | 128 | * |
clemente | 2:a2fcfb7ff611 | 129 | * @returns none |
clemente | 2:a2fcfb7ff611 | 130 | */ |
clemente | 2:a2fcfb7ff611 | 131 | void Altimeter_Mode( void); |
clemente | 2:a2fcfb7ff611 | 132 | |
clemente | 2:a2fcfb7ff611 | 133 | /** |
clemente | 2:a2fcfb7ff611 | 134 | * Set the Barometric Mode |
clemente | 2:a2fcfb7ff611 | 135 | * |
clemente | 2:a2fcfb7ff611 | 136 | * @returns none |
clemente | 2:a2fcfb7ff611 | 137 | */ |
clemente | 2:a2fcfb7ff611 | 138 | void Barometric_Mode( void); |
clemente | 2:a2fcfb7ff611 | 139 | |
clemente | 2:a2fcfb7ff611 | 140 | /** |
clemente | 5:9edec5ee8bf4 | 141 | * Get the altimeter or pressure and temperature values |
clemente | 2:a2fcfb7ff611 | 142 | * |
clemente | 5:9edec5ee8bf4 | 143 | * @param array of float f[2] |
clemente | 2:a2fcfb7ff611 | 144 | * @returns none |
clemente | 2:a2fcfb7ff611 | 145 | */ |
clemente | 2:a2fcfb7ff611 | 146 | void getAllData( float *f); |
clemente | 5:9edec5ee8bf4 | 147 | |
clemente | 5:9edec5ee8bf4 | 148 | /** |
clemente | 5:9edec5ee8bf4 | 149 | * Get the altimeter or pressure, and temperature values in raw mode |
clemente | 5:9edec5ee8bf4 | 150 | * |
clemente | 5:9edec5ee8bf4 | 151 | * @param array of unsigned char[5] |
clemente | 5:9edec5ee8bf4 | 152 | * @returns staus as 1 |
clemente | 5:9edec5ee8bf4 | 153 | */ |
clemente | 5:9edec5ee8bf4 | 154 | unsigned int getAllDataRaw( unsigned char *dt); |
clemente | 2:a2fcfb7ff611 | 155 | |
clemente | 2:a2fcfb7ff611 | 156 | /** |
clemente | 2:a2fcfb7ff611 | 157 | * Return if there are date available |
clemente | 2:a2fcfb7ff611 | 158 | * |
clemente | 2:a2fcfb7ff611 | 159 | * @return 1 for data available, 0 for no data available |
clemente | 2:a2fcfb7ff611 | 160 | */ |
clemente | 2:a2fcfb7ff611 | 161 | unsigned int isDataAvailable( void); |
clemente | 2:a2fcfb7ff611 | 162 | |
clemente | 2:a2fcfb7ff611 | 163 | /** |
clemente | 2:a2fcfb7ff611 | 164 | * Set the oversampling rate value |
clemente | 2:a2fcfb7ff611 | 165 | * |
clemente | 2:a2fcfb7ff611 | 166 | * @param oversampling values. See MPL3115A2.h |
clemente | 2:a2fcfb7ff611 | 167 | * @return none |
clemente | 2:a2fcfb7ff611 | 168 | */ |
clemente | 2:a2fcfb7ff611 | 169 | void Oversample_Ratio( unsigned int ratio); |
clemente | 0:cfecfabc5e23 | 170 | |
clemente | 2:a2fcfb7ff611 | 171 | /** |
clemente | 2:a2fcfb7ff611 | 172 | * Configure the sensor to streaming data using Interrupt |
clemente | 2:a2fcfb7ff611 | 173 | * |
clemente | 2:a2fcfb7ff611 | 174 | * @param user functin callback, oversampling values. See MPL3115A2.h |
clemente | 2:a2fcfb7ff611 | 175 | * @return none |
clemente | 2:a2fcfb7ff611 | 176 | */ |
clemente | 2:a2fcfb7ff611 | 177 | void DataReady( void(*fptr)(void), unsigned char OS); |
clemente | 3:a2f1752add9a | 178 | |
clemente | 3:a2f1752add9a | 179 | /** |
clemente | 4:fdf14a259af8 | 180 | * Configure the sensor to generate an Interrupt crossing the center threshold |
clemente | 3:a2f1752add9a | 181 | * |
clemente | 4:fdf14a259af8 | 182 | * @param user functin callback, level in meter |
clemente | 3:a2f1752add9a | 183 | * @return none |
clemente | 3:a2f1752add9a | 184 | */ |
clemente | 3:a2f1752add9a | 185 | void AltitudeTrigger( void(*fptr)(void), unsigned short level); |
clemente | 2:a2fcfb7ff611 | 186 | |
clemente | 2:a2fcfb7ff611 | 187 | /** |
clemente | 2:a2fcfb7ff611 | 188 | * Soft Reset |
clemente | 2:a2fcfb7ff611 | 189 | * |
clemente | 2:a2fcfb7ff611 | 190 | * @param none |
clemente | 2:a2fcfb7ff611 | 191 | * @return none |
clemente | 2:a2fcfb7ff611 | 192 | */ |
clemente | 2:a2fcfb7ff611 | 193 | void Reset( void); |
clemente | 0:cfecfabc5e23 | 194 | |
clemente | 0:cfecfabc5e23 | 195 | private: |
clemente | 2:a2fcfb7ff611 | 196 | I2C m_i2c; |
clemente | 2:a2fcfb7ff611 | 197 | int m_addr; |
clemente | 2:a2fcfb7ff611 | 198 | unsigned char MPL3115A2_mode; |
clemente | 2:a2fcfb7ff611 | 199 | unsigned char MPL3115A2_oversampling; |
clemente | 2:a2fcfb7ff611 | 200 | void DataReady_IRQ( void); |
clemente | 3:a2f1752add9a | 201 | void AltitudeTrg_IRQ( void); |
clemente | 2:a2fcfb7ff611 | 202 | |
clemente | 2:a2fcfb7ff611 | 203 | /** Set the device in active mode |
clemente | 2:a2fcfb7ff611 | 204 | */ |
clemente | 2:a2fcfb7ff611 | 205 | void Active( void); |
clemente | 2:a2fcfb7ff611 | 206 | |
clemente | 2:a2fcfb7ff611 | 207 | /** Set the device in standby mode |
clemente | 2:a2fcfb7ff611 | 208 | */ |
clemente | 2:a2fcfb7ff611 | 209 | void Standby( void); |
clemente | 2:a2fcfb7ff611 | 210 | |
clemente | 2:a2fcfb7ff611 | 211 | void readRegs(int addr, uint8_t * data, int len); |
clemente | 2:a2fcfb7ff611 | 212 | void writeRegs(uint8_t * data, int len); |
clemente | 0:cfecfabc5e23 | 213 | |
clemente | 0:cfecfabc5e23 | 214 | }; |
clemente | 0:cfecfabc5e23 | 215 | |
clemente | 0:cfecfabc5e23 | 216 | #endif |