imu for l432kc

Dependencies:   mbed

Committer:
sunninety1
Date:
Sat Dec 08 05:48:54 2018 +0000
Revision:
4:7b04752df27f
Parent:
2:01ca44dd3908
for l432kc;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sunninety1 2:01ca44dd3908 1 /*Use #define MPU6050_ES before you include this file if you have an engineering sample (older EVBs will have them), to find out if you have one, check your accelerometer output.
sunninety1 2:01ca44dd3908 2 If it is half of what you expected, and you still are on the correct planet, you got an engineering sample
sunninety1 2:01ca44dd3908 3 */
sunninety1 2:01ca44dd3908 4
sunninety1 2:01ca44dd3908 5
sunninety1 2:01ca44dd3908 6 #ifndef MPU6050_H
sunninety1 2:01ca44dd3908 7 #define MPU6050_H
sunninety1 2:01ca44dd3908 8
sunninety1 2:01ca44dd3908 9 /**
sunninety1 2:01ca44dd3908 10 * Includes
sunninety1 2:01ca44dd3908 11 */
sunninety1 2:01ca44dd3908 12 #include "mbed.h"
sunninety1 2:01ca44dd3908 13
sunninety1 2:01ca44dd3908 14
sunninety1 2:01ca44dd3908 15 /**
sunninety1 2:01ca44dd3908 16 * Defines */
sunninety1 2:01ca44dd3908 17 //modif prog by salvat
sunninety1 2:01ca44dd3908 18 #ifndef _MPU6050_ADDRESS
sunninety1 2:01ca44dd3908 19 #define _MPU6050_ADDRESS
sunninety1 2:01ca44dd3908 20
sunninety1 2:01ca44dd3908 21
sunninety1 2:01ca44dd3908 22 #endif
sunninety1 2:01ca44dd3908 23
sunninety1 2:01ca44dd3908 24 #ifdef MPU6050_ES
sunninety1 2:01ca44dd3908 25 #define DOUBLE_ACCELERO
sunninety1 2:01ca44dd3908 26 #endif
sunninety1 2:01ca44dd3908 27
sunninety1 2:01ca44dd3908 28 /**
sunninety1 2:01ca44dd3908 29 * Registers
sunninety1 2:01ca44dd3908 30 */
sunninety1 2:01ca44dd3908 31 #define MPU6050_CONFIG_REG 0x1A
sunninety1 2:01ca44dd3908 32 #define MPU6050_GYRO_CONFIG_REG 0x1B
sunninety1 2:01ca44dd3908 33 #define MPU6050_ACCELERO_CONFIG_REG 0x1C
sunninety1 2:01ca44dd3908 34
sunninety1 2:01ca44dd3908 35 #define MPU6050_INT_PIN_CFG 0x37
sunninety1 2:01ca44dd3908 36
sunninety1 2:01ca44dd3908 37 #define MPU6050_ACCEL_XOUT_H_REG 0x3B
sunninety1 2:01ca44dd3908 38 #define MPU6050_ACCEL_YOUT_H_REG 0x3D
sunninety1 2:01ca44dd3908 39 #define MPU6050_ACCEL_ZOUT_H_REG 0x3F
sunninety1 2:01ca44dd3908 40
sunninety1 2:01ca44dd3908 41 #define MPU6050_TEMP_H_REG 0x41
sunninety1 2:01ca44dd3908 42
sunninety1 2:01ca44dd3908 43 #define MPU6050_GYRO_XOUT_H_REG 0x43
sunninety1 2:01ca44dd3908 44 #define MPU6050_GYRO_YOUT_H_REG 0x45
sunninety1 2:01ca44dd3908 45 #define MPU6050_GYRO_ZOUT_H_REG 0x47
sunninety1 2:01ca44dd3908 46
sunninety1 2:01ca44dd3908 47
sunninety1 2:01ca44dd3908 48
sunninety1 2:01ca44dd3908 49 #define MPU6050_PWR_MGMT_1_REG 0x6B
sunninety1 2:01ca44dd3908 50 #define MPU6050_WHO_AM_I_REG 0x75
sunninety1 2:01ca44dd3908 51
sunninety1 2:01ca44dd3908 52
sunninety1 2:01ca44dd3908 53
sunninety1 2:01ca44dd3908 54 /**
sunninety1 2:01ca44dd3908 55 * Definitions
sunninety1 2:01ca44dd3908 56 */
sunninety1 2:01ca44dd3908 57 #define MPU6050_SLP_BIT 6
sunninety1 2:01ca44dd3908 58 #define MPU6050_BYPASS_BIT 1
sunninety1 2:01ca44dd3908 59
sunninety1 2:01ca44dd3908 60 #define MPU6050_BW_256 0
sunninety1 2:01ca44dd3908 61 #define MPU6050_BW_188 1
sunninety1 2:01ca44dd3908 62 #define MPU6050_BW_98 2
sunninety1 2:01ca44dd3908 63 #define MPU6050_BW_42 3
sunninety1 2:01ca44dd3908 64 #define MPU6050_BW_20 4
sunninety1 2:01ca44dd3908 65 #define MPU6050_BW_10 5
sunninety1 2:01ca44dd3908 66 #define MPU6050_BW_5 6
sunninety1 2:01ca44dd3908 67
sunninety1 2:01ca44dd3908 68 #define MPU6050_ACCELERO_RANGE_2G 0
sunninety1 2:01ca44dd3908 69 #define MPU6050_ACCELERO_RANGE_4G 1
sunninety1 2:01ca44dd3908 70 #define MPU6050_ACCELERO_RANGE_8G 2
sunninety1 2:01ca44dd3908 71 #define MPU6050_ACCELERO_RANGE_16G 3
sunninety1 2:01ca44dd3908 72
sunninety1 2:01ca44dd3908 73 #define MPU6050_GYRO_RANGE_250 0
sunninety1 2:01ca44dd3908 74 #define MPU6050_GYRO_RANGE_500 1
sunninety1 2:01ca44dd3908 75 #define MPU6050_GYRO_RANGE_1000 2
sunninety1 2:01ca44dd3908 76 #define MPU6050_GYRO_RANGE_2000 3
sunninety1 2:01ca44dd3908 77
sunninety1 2:01ca44dd3908 78
sunninety1 2:01ca44dd3908 79 /** MPU6050 IMU library.
sunninety1 2:01ca44dd3908 80 *
sunninety1 2:01ca44dd3908 81 * Example:
sunninety1 2:01ca44dd3908 82 * @code
sunninety1 2:01ca44dd3908 83 * Later, maybe
sunninety1 2:01ca44dd3908 84 * @endcode
sunninety1 2:01ca44dd3908 85 */
sunninety1 2:01ca44dd3908 86 class MPU6050 {
sunninety1 2:01ca44dd3908 87 public:
sunninety1 2:01ca44dd3908 88 /**
sunninety1 2:01ca44dd3908 89 * Constructor.
sunninety1 2:01ca44dd3908 90 *
sunninety1 2:01ca44dd3908 91 * Sleep mode of MPU6050 is immediatly disabled
sunninety1 2:01ca44dd3908 92 *
sunninety1 2:01ca44dd3908 93 * @param sda - mbed pin to use for the SDA I2C line.
sunninety1 2:01ca44dd3908 94 * @param scl - mbed pin to use for the SCL I2C line.
sunninety1 2:01ca44dd3908 95 */
sunninety1 2:01ca44dd3908 96 MPU6050(PinName sda, PinName scl);
sunninety1 2:01ca44dd3908 97
sunninety1 2:01ca44dd3908 98
sunninety1 2:01ca44dd3908 99 /**
sunninety1 2:01ca44dd3908 100 * Tests the I2C connection by reading the WHO_AM_I register.
sunninety1 2:01ca44dd3908 101 *
sunninety1 2:01ca44dd3908 102 * @return True for a working connection, false for an error
sunninety1 2:01ca44dd3908 103 */
sunninety1 2:01ca44dd3908 104 bool testConnection( void );
sunninety1 2:01ca44dd3908 105
sunninety1 2:01ca44dd3908 106 /**
sunninety1 2:01ca44dd3908 107 * Sets the bandwidth of the digital low-pass filter
sunninety1 2:01ca44dd3908 108 *
sunninety1 2:01ca44dd3908 109 * Macros: MPU6050_BW_256 - MPU6050_BW_188 - MPU6050_BW_98 - MPU6050_BW_42 - MPU6050_BW_20 - MPU6050_BW_10 - MPU6050_BW_5
sunninety1 2:01ca44dd3908 110 * Last number is the gyro's BW in Hz (accelero BW is virtually identical)
sunninety1 2:01ca44dd3908 111 *
sunninety1 2:01ca44dd3908 112 * @param BW - The three bits that set the bandwidth (use the predefined macros)
sunninety1 2:01ca44dd3908 113 */
sunninety1 2:01ca44dd3908 114 void setBW( char BW );
sunninety1 2:01ca44dd3908 115
sunninety1 2:01ca44dd3908 116 /**
sunninety1 2:01ca44dd3908 117 * Sets the auxiliary I2C bus in bypass mode to read the sensors behind the MPU6050 (useful for eval board, otherwise just connect them to primary I2C bus)
sunninety1 2:01ca44dd3908 118 *
sunninety1 2:01ca44dd3908 119 * @param state - Enables/disables the I2C bypass mode
sunninety1 2:01ca44dd3908 120 */
sunninety1 2:01ca44dd3908 121 void setI2CBypass ( bool state );
sunninety1 2:01ca44dd3908 122
sunninety1 2:01ca44dd3908 123 /**
sunninety1 2:01ca44dd3908 124 * Sets the Accelero full-scale range
sunninety1 2:01ca44dd3908 125 *
sunninety1 2:01ca44dd3908 126 * Macros: MPU6050_ACCELERO_RANGE_2G - MPU6050_ACCELERO_RANGE_4G - MPU6050_ACCELERO_RANGE_8G - MPU6050_ACCELERO_RANGE_16G
sunninety1 2:01ca44dd3908 127 *
sunninety1 2:01ca44dd3908 128 * @param range - The two bits that set the full-scale range (use the predefined macros)
sunninety1 2:01ca44dd3908 129 */
sunninety1 2:01ca44dd3908 130 void setAcceleroRange(char range);
sunninety1 2:01ca44dd3908 131
sunninety1 2:01ca44dd3908 132 /**
sunninety1 2:01ca44dd3908 133 * Reads the accelero x-axis.
sunninety1 2:01ca44dd3908 134 *
sunninety1 2:01ca44dd3908 135 * @return 16-bit signed integer x-axis accelero data
sunninety1 2:01ca44dd3908 136 */
sunninety1 2:01ca44dd3908 137 int getAcceleroRawX( void );
sunninety1 2:01ca44dd3908 138
sunninety1 2:01ca44dd3908 139 /**
sunninety1 2:01ca44dd3908 140 * Reads the accelero y-axis.
sunninety1 2:01ca44dd3908 141 *
sunninety1 2:01ca44dd3908 142 * @return 16-bit signed integer y-axis accelero data
sunninety1 2:01ca44dd3908 143 */
sunninety1 2:01ca44dd3908 144 int getAcceleroRawY( void );
sunninety1 2:01ca44dd3908 145
sunninety1 2:01ca44dd3908 146 /**
sunninety1 2:01ca44dd3908 147 * Reads the accelero z-axis.
sunninety1 2:01ca44dd3908 148 *
sunninety1 2:01ca44dd3908 149 * @return 16-bit signed integer z-axis accelero data
sunninety1 2:01ca44dd3908 150 */
sunninety1 2:01ca44dd3908 151 int getAcceleroRawZ( void );
sunninety1 2:01ca44dd3908 152
sunninety1 2:01ca44dd3908 153 /**
sunninety1 2:01ca44dd3908 154 * Reads all accelero data.
sunninety1 2:01ca44dd3908 155 *
sunninety1 2:01ca44dd3908 156 * @param data - pointer to signed integer array with length three: data[0] = X, data[1] = Y, data[2] = Z
sunninety1 2:01ca44dd3908 157 */
sunninety1 2:01ca44dd3908 158 void getAcceleroRaw( int *data );
sunninety1 2:01ca44dd3908 159
sunninety1 2:01ca44dd3908 160 /**
sunninety1 2:01ca44dd3908 161 * Reads all accelero data, gives the acceleration in m/s2
sunninety1 2:01ca44dd3908 162 *
sunninety1 2:01ca44dd3908 163 * Function uses the last setup value of the full scale range, if you manually set in another range, this won't work.
sunninety1 2:01ca44dd3908 164 *
sunninety1 2:01ca44dd3908 165 * @param data - pointer to float array with length three: data[0] = X, data[1] = Y, data[2] = Z
sunninety1 2:01ca44dd3908 166 */
sunninety1 2:01ca44dd3908 167 void getAccelero( float *data );
sunninety1 2:01ca44dd3908 168
sunninety1 2:01ca44dd3908 169 /**
sunninety1 2:01ca44dd3908 170 * Sets the Gyro full-scale range
sunninety1 2:01ca44dd3908 171 *
sunninety1 2:01ca44dd3908 172 * Macros: MPU6050_GYRO_RANGE_250 - MPU6050_GYRO_RANGE_500 - MPU6050_GYRO_RANGE_1000 - MPU6050_GYRO_RANGE_2000
sunninety1 2:01ca44dd3908 173 *
sunninety1 2:01ca44dd3908 174 * @param range - The two bits that set the full-scale range (use the predefined macros)
sunninety1 2:01ca44dd3908 175 */
sunninety1 2:01ca44dd3908 176 void setGyroRange(char range);
sunninety1 2:01ca44dd3908 177
sunninety1 2:01ca44dd3908 178 /**
sunninety1 2:01ca44dd3908 179 * Reads the gyro x-axis.
sunninety1 2:01ca44dd3908 180 *
sunninety1 2:01ca44dd3908 181 * @return 16-bit signed integer x-axis gyro data
sunninety1 2:01ca44dd3908 182 */
sunninety1 2:01ca44dd3908 183 int getGyroRawX( void );
sunninety1 2:01ca44dd3908 184
sunninety1 2:01ca44dd3908 185 /**
sunninety1 2:01ca44dd3908 186 * Reads the gyro y-axis.
sunninety1 2:01ca44dd3908 187 *
sunninety1 2:01ca44dd3908 188 * @return 16-bit signed integer y-axis gyro data
sunninety1 2:01ca44dd3908 189 */
sunninety1 2:01ca44dd3908 190 int getGyroRawY( void );
sunninety1 2:01ca44dd3908 191
sunninety1 2:01ca44dd3908 192 /**
sunninety1 2:01ca44dd3908 193 * Reads the gyro z-axis.
sunninety1 2:01ca44dd3908 194 *
sunninety1 2:01ca44dd3908 195 * @return 16-bit signed integer z-axis gyro data
sunninety1 2:01ca44dd3908 196 */
sunninety1 2:01ca44dd3908 197 int getGyroRawZ( void );
sunninety1 2:01ca44dd3908 198
sunninety1 2:01ca44dd3908 199 /**
sunninety1 2:01ca44dd3908 200 * Reads all gyro data.
sunninety1 2:01ca44dd3908 201 *
sunninety1 2:01ca44dd3908 202 * @param data - pointer to signed integer array with length three: data[0] = X, data[1] = Y, data[2] = Z
sunninety1 2:01ca44dd3908 203 */
sunninety1 2:01ca44dd3908 204 void getGyroRaw( int *data );
sunninety1 2:01ca44dd3908 205
sunninety1 2:01ca44dd3908 206 /**
sunninety1 2:01ca44dd3908 207 * Reads all gyro data, gives the gyro in rad/s
sunninety1 2:01ca44dd3908 208 *
sunninety1 2:01ca44dd3908 209 * Function uses the last setup value of the full scale range, if you manually set in another range, this won't work.
sunninety1 2:01ca44dd3908 210 *
sunninety1 2:01ca44dd3908 211 * @param data - pointer to float array with length three: data[0] = X, data[1] = Y, data[2] = Z
sunninety1 2:01ca44dd3908 212 */
sunninety1 2:01ca44dd3908 213 void getGyro( float *data);
sunninety1 2:01ca44dd3908 214
sunninety1 2:01ca44dd3908 215 /**
sunninety1 2:01ca44dd3908 216 * Reads temperature data.
sunninety1 2:01ca44dd3908 217 *
sunninety1 2:01ca44dd3908 218 * @return 16 bit signed integer with the raw temperature register value
sunninety1 2:01ca44dd3908 219 */
sunninety1 2:01ca44dd3908 220 int getTempRaw( void );
sunninety1 2:01ca44dd3908 221
sunninety1 2:01ca44dd3908 222 /**
sunninety1 2:01ca44dd3908 223 * Returns current temperature
sunninety1 2:01ca44dd3908 224 *
sunninety1 2:01ca44dd3908 225 * @returns float with the current temperature
sunninety1 2:01ca44dd3908 226 */
sunninety1 2:01ca44dd3908 227 float getTemp( void );
sunninety1 2:01ca44dd3908 228
sunninety1 2:01ca44dd3908 229 /**
sunninety1 2:01ca44dd3908 230 * Sets the sleep mode of the MPU6050
sunninety1 2:01ca44dd3908 231 *
sunninety1 2:01ca44dd3908 232 * @param state - true for sleeping, false for wake up
sunninety1 2:01ca44dd3908 233 */
sunninety1 2:01ca44dd3908 234 void setSleepMode( bool state );
sunninety1 2:01ca44dd3908 235
sunninety1 2:01ca44dd3908 236
sunninety1 2:01ca44dd3908 237 /**
sunninety1 2:01ca44dd3908 238 * Writes data to the device, could be private, but public is handy so you can transmit directly to the MPU.
sunninety1 2:01ca44dd3908 239 *
sunninety1 2:01ca44dd3908 240 * @param adress - register address to write to
sunninety1 2:01ca44dd3908 241 * @param data - data to write
sunninety1 2:01ca44dd3908 242 */
sunninety1 2:01ca44dd3908 243 void write( char address, char data);
sunninety1 2:01ca44dd3908 244
sunninety1 2:01ca44dd3908 245 /**
sunninety1 2:01ca44dd3908 246 * Read data from the device, could be private, but public is handy so you can transmit directly to the MPU.
sunninety1 2:01ca44dd3908 247 *
sunninety1 2:01ca44dd3908 248 * @param adress - register address to write to
sunninety1 2:01ca44dd3908 249 * @return - data from the register specified by RA
sunninety1 2:01ca44dd3908 250 */
sunninety1 2:01ca44dd3908 251 char read( char adress);
sunninety1 2:01ca44dd3908 252
sunninety1 2:01ca44dd3908 253 /**
sunninety1 2:01ca44dd3908 254 * Read multtiple regigsters from the device, more efficient than using multiple normal reads.
sunninety1 2:01ca44dd3908 255 *
sunninety1 2:01ca44dd3908 256 * @param adress - register address to write to
sunninety1 2:01ca44dd3908 257 * @param length - number of bytes to read
sunninety1 2:01ca44dd3908 258 * @param data - pointer where the data needs to be written to
sunninety1 2:01ca44dd3908 259 */
sunninety1 2:01ca44dd3908 260 void read( char adress, char *data, int length);
sunninety1 2:01ca44dd3908 261
sunninety1 2:01ca44dd3908 262 /**
sunninety1 2:01ca44dd3908 263 * Find all I2C devices and print all devices I2C + update MPU6050_ADDRESS (choice between 0x68 and 0X69)
sunninety1 2:01ca44dd3908 264 *
sunninety1 2:01ca44dd3908 265 */
sunninety1 2:01ca44dd3908 266 bool I2C_finder();
sunninety1 2:01ca44dd3908 267
sunninety1 2:01ca44dd3908 268 private:
sunninety1 2:01ca44dd3908 269 I2C connection;
sunninety1 2:01ca44dd3908 270 char currentAcceleroRange;
sunninety1 2:01ca44dd3908 271 char currentGyroRange;
sunninety1 2:01ca44dd3908 272 // add by salvat : permet de trouver l'adresse du MPU6050 dans testConnexion
sunninety1 2:01ca44dd3908 273 char MPU6050_ADDRESS;// address pin low (GND), default for InvenSense evaluation board
sunninety1 2:01ca44dd3908 274 bool isFindMPU6050;
sunninety1 2:01ca44dd3908 275
sunninety1 2:01ca44dd3908 276
sunninety1 2:01ca44dd3908 277
sunninety1 2:01ca44dd3908 278 };
sunninety1 2:01ca44dd3908 279
sunninety1 2:01ca44dd3908 280
sunninety1 2:01ca44dd3908 281
sunninety1 2:01ca44dd3908 282 #endif