エラー判定用 '\0' + クォータニオンのfloat型4成分,合計17byteのデータをひたすらバイナリ形式で送り続ける.最初のバイトが '\0' でなかったらズレているので,適当なバイト数見送って先頭が '\0' になるよう合わせること.

Dependencies:   Eigen mbed

Committer:
daqn
Date:
Wed Mar 21 07:58:57 2018 +0000
Revision:
0:2a7221ee9861
i dont know what should i write here

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daqn 0:2a7221ee9861 1 /** Daqn change log
daqn 0:2a7221ee9861 2 * 2018/02/16 : Replace words "MPU6050" with "MPU9250".
daqn 0:2a7221ee9861 3 * 2018/02/21 :
daqn 0:2a7221ee9861 4 */
daqn 0:2a7221ee9861 5
daqn 0:2a7221ee9861 6 /*Use #define MPU9250_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.
daqn 0:2a7221ee9861 7 If it is half of what you expected, and you still are on the correct planet, you got an engineering sample
daqn 0:2a7221ee9861 8 */
daqn 0:2a7221ee9861 9
daqn 0:2a7221ee9861 10
daqn 0:2a7221ee9861 11 #ifndef MPU9250_H
daqn 0:2a7221ee9861 12 #define MPU9250_H
daqn 0:2a7221ee9861 13
daqn 0:2a7221ee9861 14 /**
daqn 0:2a7221ee9861 15 * Includes
daqn 0:2a7221ee9861 16 */
daqn 0:2a7221ee9861 17 #include "mbed.h"
daqn 0:2a7221ee9861 18
daqn 0:2a7221ee9861 19
daqn 0:2a7221ee9861 20 /**
daqn 0:2a7221ee9861 21 * Defines
daqn 0:2a7221ee9861 22 */
daqn 0:2a7221ee9861 23 #ifndef MPU9250_ADDRESS
daqn 0:2a7221ee9861 24 #define MPU9250_ADDRESS 0x68 // address pin low (GND), default for InvenSense evaluation board
daqn 0:2a7221ee9861 25 #endif
daqn 0:2a7221ee9861 26
daqn 0:2a7221ee9861 27 #ifdef MPU9250_ES
daqn 0:2a7221ee9861 28 #define DOUBLE_ACCELERO
daqn 0:2a7221ee9861 29 #endif
daqn 0:2a7221ee9861 30
daqn 0:2a7221ee9861 31 /**
daqn 0:2a7221ee9861 32 * Registers
daqn 0:2a7221ee9861 33 */
daqn 0:2a7221ee9861 34 #define MPU9250_CONFIG_REG 0x1A
daqn 0:2a7221ee9861 35 #define MPU9250_GYRO_CONFIG_REG 0x1B
daqn 0:2a7221ee9861 36 #define MPU9250_ACCELERO_CONFIG_REG 0x1C
daqn 0:2a7221ee9861 37
daqn 0:2a7221ee9861 38 #define MPU9250_INT_PIN_CFG 0x37
daqn 0:2a7221ee9861 39
daqn 0:2a7221ee9861 40 #define MPU9250_ACCEL_XOUT_H_REG 0x3B
daqn 0:2a7221ee9861 41 #define MPU9250_ACCEL_YOUT_H_REG 0x3D
daqn 0:2a7221ee9861 42 #define MPU9250_ACCEL_ZOUT_H_REG 0x3F
daqn 0:2a7221ee9861 43
daqn 0:2a7221ee9861 44 #define MPU9250_TEMP_H_REG 0x41
daqn 0:2a7221ee9861 45
daqn 0:2a7221ee9861 46 #define MPU9250_GYRO_XOUT_H_REG 0x43
daqn 0:2a7221ee9861 47 #define MPU9250_GYRO_YOUT_H_REG 0x45
daqn 0:2a7221ee9861 48 #define MPU9250_GYRO_ZOUT_H_REG 0x47
daqn 0:2a7221ee9861 49
daqn 0:2a7221ee9861 50 #define MPU9250_MAG_XOUT_H_REG 0x04
daqn 0:2a7221ee9861 51 #define MPU9250_MAG_YOUT_H_REG 0x06
daqn 0:2a7221ee9861 52 #define MPU9250_MAG_ZOUT_H_REG 0x08
daqn 0:2a7221ee9861 53
daqn 0:2a7221ee9861 54
daqn 0:2a7221ee9861 55
daqn 0:2a7221ee9861 56 #define MPU9250_PWR_MGMT_1_REG 0x6B
daqn 0:2a7221ee9861 57 #define MPU9250_WHO_AM_I_REG 0x75
daqn 0:2a7221ee9861 58
daqn 0:2a7221ee9861 59
daqn 0:2a7221ee9861 60
daqn 0:2a7221ee9861 61 /**
daqn 0:2a7221ee9861 62 * Definitions
daqn 0:2a7221ee9861 63 */
daqn 0:2a7221ee9861 64 #define MPU9250_SLP_BIT 6
daqn 0:2a7221ee9861 65 #define MPU9250_BYPASS_BIT 1
daqn 0:2a7221ee9861 66
daqn 0:2a7221ee9861 67 #define MPU9250_BW_256 0
daqn 0:2a7221ee9861 68 #define MPU9250_BW_188 1
daqn 0:2a7221ee9861 69 #define MPU9250_BW_98 2
daqn 0:2a7221ee9861 70 #define MPU9250_BW_42 3
daqn 0:2a7221ee9861 71 #define MPU9250_BW_20 4
daqn 0:2a7221ee9861 72 #define MPU9250_BW_10 5
daqn 0:2a7221ee9861 73 #define MPU9250_BW_5 6
daqn 0:2a7221ee9861 74
daqn 0:2a7221ee9861 75 #define MPU9250_ACCELERO_RANGE_2G 0
daqn 0:2a7221ee9861 76 #define MPU9250_ACCELERO_RANGE_4G 1
daqn 0:2a7221ee9861 77 #define MPU9250_ACCELERO_RANGE_8G 2
daqn 0:2a7221ee9861 78 #define MPU9250_ACCELERO_RANGE_16G 3
daqn 0:2a7221ee9861 79
daqn 0:2a7221ee9861 80 #define MPU9250_GYRO_RANGE_250 0
daqn 0:2a7221ee9861 81 #define MPU9250_GYRO_RANGE_500 1
daqn 0:2a7221ee9861 82 #define MPU9250_GYRO_RANGE_1000 2
daqn 0:2a7221ee9861 83 #define MPU9250_GYRO_RANGE_2000 3
daqn 0:2a7221ee9861 84
daqn 0:2a7221ee9861 85 //interrupt address
daqn 0:2a7221ee9861 86 #define MPU9250_RA_INT_ENABLE 0x38
daqn 0:2a7221ee9861 87 //define how the accelerometer is placed on surface
daqn 0:2a7221ee9861 88 #define X_AXIS 1
daqn 0:2a7221ee9861 89 #define Y_AXIS 2
daqn 0:2a7221ee9861 90 #define Z_AXIS 0
daqn 0:2a7221ee9861 91 //translation from radians to degrees
daqn 0:2a7221ee9861 92 #define RADIANS_TO_DEGREES 180/3.1415926536
daqn 0:2a7221ee9861 93 //constant used for the complementary filter, which ranges usually from 0.9 to 1.0
daqn 0:2a7221ee9861 94 #define ALPHA 0.96 //filter constant
daqn 0:2a7221ee9861 95 //scale the gyro
daqn 0:2a7221ee9861 96 #define GYRO_SCALE 2.7176
daqn 0:2a7221ee9861 97
daqn 0:2a7221ee9861 98
daqn 0:2a7221ee9861 99 /**
daqn 0:2a7221ee9861 100 * Magnetometer
daqn 0:2a7221ee9861 101 */
daqn 0:2a7221ee9861 102 #define AK8963_ADDRESS 0x0C<<1
daqn 0:2a7221ee9861 103 #define WHO_AM_I_AK8963 0x00 // should return 0x48
daqn 0:2a7221ee9861 104 #define INFO 0x01
daqn 0:2a7221ee9861 105 #define AK8963_ST1 0x02 // data ready status bit 0
daqn 0:2a7221ee9861 106 #define AK8963_XOUT_L 0x03 // data
daqn 0:2a7221ee9861 107 #define AK8963_XOUT_H 0x04
daqn 0:2a7221ee9861 108 #define AK8963_YOUT_L 0x05
daqn 0:2a7221ee9861 109 #define AK8963_YOUT_H 0x06
daqn 0:2a7221ee9861 110 #define AK8963_ZOUT_L 0x07
daqn 0:2a7221ee9861 111 #define AK8963_ZOUT_H 0x08
daqn 0:2a7221ee9861 112 #define AK8963_ST2 0x09 // Data overflow bit 3 and data read error status bit 2
daqn 0:2a7221ee9861 113 #define AK8963_CNTL 0x0A // Power down (0000), single-measurement (0001), self-test (1000) and Fuse ROM (1111) modes on bits 3:0
daqn 0:2a7221ee9861 114 #define AK8963_ASTC 0x0C // Self test control
daqn 0:2a7221ee9861 115 #define AK8963_I2CDIS 0x0F // I2C disable
daqn 0:2a7221ee9861 116 #define AK8963_ASAX 0x10 // Fuse ROM x-axis sensitivity adjustment value
daqn 0:2a7221ee9861 117 #define AK8963_ASAY 0x11 // Fuse ROM y-axis sensitivity adjustment value
daqn 0:2a7221ee9861 118 #define AK8963_ASAZ 0x12 // Fuse ROM z-axis sensitivity adjustment value
daqn 0:2a7221ee9861 119
daqn 0:2a7221ee9861 120
daqn 0:2a7221ee9861 121 /** MPU9250 IMU library.
daqn 0:2a7221ee9861 122 *
daqn 0:2a7221ee9861 123 * Example:
daqn 0:2a7221ee9861 124 * @code
daqn 0:2a7221ee9861 125 * Later, maybe
daqn 0:2a7221ee9861 126 * @endcode
daqn 0:2a7221ee9861 127 */
daqn 0:2a7221ee9861 128 class MPU9250
daqn 0:2a7221ee9861 129 {
daqn 0:2a7221ee9861 130 public:
daqn 0:2a7221ee9861 131 /**
daqn 0:2a7221ee9861 132 * Constructor.
daqn 0:2a7221ee9861 133 *
daqn 0:2a7221ee9861 134 * Sleep mode of MPU9250 is immediatly disabled
daqn 0:2a7221ee9861 135 *
daqn 0:2a7221ee9861 136 * @param sda - mbed pin to use for the SDA I2C line.
daqn 0:2a7221ee9861 137 * @param scl - mbed pin to use for the SCL I2C line.
daqn 0:2a7221ee9861 138 */
daqn 0:2a7221ee9861 139 MPU9250(PinName sda, PinName scl);
daqn 0:2a7221ee9861 140
daqn 0:2a7221ee9861 141
daqn 0:2a7221ee9861 142 /**
daqn 0:2a7221ee9861 143 * Tests the I2C connection by reading the WHO_AM_I register.
daqn 0:2a7221ee9861 144 *
daqn 0:2a7221ee9861 145 * @return True for a working connection, false for an error
daqn 0:2a7221ee9861 146 */
daqn 0:2a7221ee9861 147 bool testConnection( void );
daqn 0:2a7221ee9861 148
daqn 0:2a7221ee9861 149 /**
daqn 0:2a7221ee9861 150 * Sets the bandwidth of the digital low-pass filter
daqn 0:2a7221ee9861 151 *
daqn 0:2a7221ee9861 152 * Macros: MPU9250_BW_256 - MPU9250_BW_188 - MPU9250_BW_98 - MPU9250_BW_42 - MPU9250_BW_20 - MPU9250_BW_10 - MPU9250_BW_5
daqn 0:2a7221ee9861 153 * Last number is the gyro's BW in Hz (accelero BW is virtually identical)
daqn 0:2a7221ee9861 154 *
daqn 0:2a7221ee9861 155 * @param BW - The three bits that set the bandwidth (use the predefined macros)
daqn 0:2a7221ee9861 156 */
daqn 0:2a7221ee9861 157 void setBW( char BW );
daqn 0:2a7221ee9861 158
daqn 0:2a7221ee9861 159 /**
daqn 0:2a7221ee9861 160 * Sets the auxiliary I2C bus in bypass mode to read the sensors behind the MPU9250 (useful for eval board, otherwise just connect them to primary I2C bus)
daqn 0:2a7221ee9861 161 *
daqn 0:2a7221ee9861 162 * @param state - Enables/disables the I2C bypass mode
daqn 0:2a7221ee9861 163 */
daqn 0:2a7221ee9861 164 void setI2CBypass ( bool state );
daqn 0:2a7221ee9861 165
daqn 0:2a7221ee9861 166 /**
daqn 0:2a7221ee9861 167 * Sets the Accelero full-scale range
daqn 0:2a7221ee9861 168 *
daqn 0:2a7221ee9861 169 * Macros: MPU9250_ACCELERO_RANGE_2G - MPU9250_ACCELERO_RANGE_4G - MPU9250_ACCELERO_RANGE_8G - MPU9250_ACCELERO_RANGE_16G
daqn 0:2a7221ee9861 170 *
daqn 0:2a7221ee9861 171 * @param range - The two bits that set the full-scale range (use the predefined macros)
daqn 0:2a7221ee9861 172 */
daqn 0:2a7221ee9861 173 void setAcceleroRange(char range);
daqn 0:2a7221ee9861 174
daqn 0:2a7221ee9861 175 /**
daqn 0:2a7221ee9861 176 * Reads the accelero x-axis.
daqn 0:2a7221ee9861 177 *
daqn 0:2a7221ee9861 178 * @return 16-bit signed integer x-axis accelero data
daqn 0:2a7221ee9861 179 */
daqn 0:2a7221ee9861 180 int getAcceleroRawX( void );
daqn 0:2a7221ee9861 181
daqn 0:2a7221ee9861 182 /**
daqn 0:2a7221ee9861 183 * Reads the accelero y-axis.
daqn 0:2a7221ee9861 184 *
daqn 0:2a7221ee9861 185 * @return 16-bit signed integer y-axis accelero data
daqn 0:2a7221ee9861 186 */
daqn 0:2a7221ee9861 187 int getAcceleroRawY( void );
daqn 0:2a7221ee9861 188
daqn 0:2a7221ee9861 189 /**
daqn 0:2a7221ee9861 190 * Reads the accelero z-axis.
daqn 0:2a7221ee9861 191 *
daqn 0:2a7221ee9861 192 * @return 16-bit signed integer z-axis accelero data
daqn 0:2a7221ee9861 193 */
daqn 0:2a7221ee9861 194 int getAcceleroRawZ( void );
daqn 0:2a7221ee9861 195
daqn 0:2a7221ee9861 196 /**
daqn 0:2a7221ee9861 197 * Reads all accelero data.
daqn 0:2a7221ee9861 198 *
daqn 0:2a7221ee9861 199 * @param data - pointer to signed integer array with length three: data[0] = X, data[1] = Y, data[2] = Z
daqn 0:2a7221ee9861 200 */
daqn 0:2a7221ee9861 201 void getAcceleroRaw( int *data );
daqn 0:2a7221ee9861 202
daqn 0:2a7221ee9861 203 /**
daqn 0:2a7221ee9861 204 * Reads all accelero data, gives the acceleration in m/s2
daqn 0:2a7221ee9861 205 *
daqn 0:2a7221ee9861 206 * Function uses the last setup value of the full scale range, if you manually set in another range, this won't work.
daqn 0:2a7221ee9861 207 *
daqn 0:2a7221ee9861 208 * @param data - pointer to float array with length three: data[0] = X, data[1] = Y, data[2] = Z
daqn 0:2a7221ee9861 209 */
daqn 0:2a7221ee9861 210 void getAccelero( float *data );
daqn 0:2a7221ee9861 211
daqn 0:2a7221ee9861 212 /**
daqn 0:2a7221ee9861 213 * Sets the Gyro full-scale range
daqn 0:2a7221ee9861 214 *
daqn 0:2a7221ee9861 215 * Macros: MPU9250_GYRO_RANGE_250 - MPU9250_GYRO_RANGE_500 - MPU9250_GYRO_RANGE_1000 - MPU9250_GYRO_RANGE_2000
daqn 0:2a7221ee9861 216 *
daqn 0:2a7221ee9861 217 * @param range - The two bits that set the full-scale range (use the predefined macros)
daqn 0:2a7221ee9861 218 */
daqn 0:2a7221ee9861 219 void setGyroRange(char range);
daqn 0:2a7221ee9861 220
daqn 0:2a7221ee9861 221 /**
daqn 0:2a7221ee9861 222 * Reads the gyro x-axis.
daqn 0:2a7221ee9861 223 *
daqn 0:2a7221ee9861 224 * @return 16-bit signed integer x-axis gyro data
daqn 0:2a7221ee9861 225 */
daqn 0:2a7221ee9861 226 int getGyroRawX( void );
daqn 0:2a7221ee9861 227
daqn 0:2a7221ee9861 228 /**
daqn 0:2a7221ee9861 229 * Reads the gyro y-axis.
daqn 0:2a7221ee9861 230 *
daqn 0:2a7221ee9861 231 * @return 16-bit signed integer y-axis gyro data
daqn 0:2a7221ee9861 232 */
daqn 0:2a7221ee9861 233 int getGyroRawY( void );
daqn 0:2a7221ee9861 234
daqn 0:2a7221ee9861 235 /**
daqn 0:2a7221ee9861 236 * Reads the gyro z-axis.
daqn 0:2a7221ee9861 237 *
daqn 0:2a7221ee9861 238 * @return 16-bit signed integer z-axis gyro data
daqn 0:2a7221ee9861 239 */
daqn 0:2a7221ee9861 240 int getGyroRawZ( void );
daqn 0:2a7221ee9861 241
daqn 0:2a7221ee9861 242 /**
daqn 0:2a7221ee9861 243 * Reads all gyro data.
daqn 0:2a7221ee9861 244 *
daqn 0:2a7221ee9861 245 * @param data - pointer to signed integer array with length three: data[0] = X, data[1] = Y, data[2] = Z
daqn 0:2a7221ee9861 246 */
daqn 0:2a7221ee9861 247 void getGyroRaw( int *data );
daqn 0:2a7221ee9861 248
daqn 0:2a7221ee9861 249 /**
daqn 0:2a7221ee9861 250 * Reads all gyro data, gives the gyro in rad/s
daqn 0:2a7221ee9861 251 *
daqn 0:2a7221ee9861 252 * Function uses the last setup value of the full scale range, if you manually set in another range, this won't work.
daqn 0:2a7221ee9861 253 *
daqn 0:2a7221ee9861 254 * @param data - pointer to float array with length three: data[0] = X, data[1] = Y, data[2] = Z
daqn 0:2a7221ee9861 255 */
daqn 0:2a7221ee9861 256 void getGyro( float *data);
daqn 0:2a7221ee9861 257
daqn 0:2a7221ee9861 258 /**
daqn 0:2a7221ee9861 259 * Reads temperature data.
daqn 0:2a7221ee9861 260 *
daqn 0:2a7221ee9861 261 * @return 16 bit signed integer with the raw temperature register value
daqn 0:2a7221ee9861 262 */
daqn 0:2a7221ee9861 263 int getTempRaw( void );
daqn 0:2a7221ee9861 264
daqn 0:2a7221ee9861 265 /**
daqn 0:2a7221ee9861 266 * Returns current temperature
daqn 0:2a7221ee9861 267 *
daqn 0:2a7221ee9861 268 * @returns float with the current temperature
daqn 0:2a7221ee9861 269 */
daqn 0:2a7221ee9861 270 float getTemp( void );
daqn 0:2a7221ee9861 271
daqn 0:2a7221ee9861 272 /**
daqn 0:2a7221ee9861 273 * Sets the sleep mode of the MPU9250
daqn 0:2a7221ee9861 274 *
daqn 0:2a7221ee9861 275 * @param state - true for sleeping, false for wake up
daqn 0:2a7221ee9861 276 */
daqn 0:2a7221ee9861 277 void setSleepMode( bool state );
daqn 0:2a7221ee9861 278
daqn 0:2a7221ee9861 279
daqn 0:2a7221ee9861 280 /**
daqn 0:2a7221ee9861 281 * Writes data to the device, could be private, but public is handy so you can transmit directly to the MPU.
daqn 0:2a7221ee9861 282 *
daqn 0:2a7221ee9861 283 * @param adress - register address to write to
daqn 0:2a7221ee9861 284 * @param data - data to write
daqn 0:2a7221ee9861 285 */
daqn 0:2a7221ee9861 286 void write( char address, char data);
daqn 0:2a7221ee9861 287
daqn 0:2a7221ee9861 288 /**
daqn 0:2a7221ee9861 289 * Read data from the device, could be private, but public is handy so you can transmit directly to the MPU.
daqn 0:2a7221ee9861 290 *
daqn 0:2a7221ee9861 291 * @param adress - register address to write to
daqn 0:2a7221ee9861 292 * @return - data from the register specified by RA
daqn 0:2a7221ee9861 293 */
daqn 0:2a7221ee9861 294 char read( char adress);
daqn 0:2a7221ee9861 295
daqn 0:2a7221ee9861 296 /**
daqn 0:2a7221ee9861 297 * Read multtiple regigsters from the device, more efficient than using multiple normal reads.
daqn 0:2a7221ee9861 298 *
daqn 0:2a7221ee9861 299 * @param adress - register address to write to
daqn 0:2a7221ee9861 300 * @param length - number of bytes to read
daqn 0:2a7221ee9861 301 * @param data - pointer where the data needs to be written to
daqn 0:2a7221ee9861 302 */
daqn 0:2a7221ee9861 303 void read( char adress, char *data, int length);
daqn 0:2a7221ee9861 304
daqn 0:2a7221ee9861 305 /**
daqn 0:2a7221ee9861 306 * function for calculating the angle from the accelerometer.
daqn 0:2a7221ee9861 307 * it takes 3 values which correspond acceleration in X, Y and Z direction and calculates angles in degrees
daqn 0:2a7221ee9861 308 * for pitch, roll and one more direction.. (NOT YAW!)
daqn 0:2a7221ee9861 309 *
daqn 0:2a7221ee9861 310 * @param data - angle calculated using only accelerometer
daqn 0:2a7221ee9861 311 *
daqn 0:2a7221ee9861 312 */
daqn 0:2a7221ee9861 313 void getAcceleroAngle( float *data );
daqn 0:2a7221ee9861 314
daqn 0:2a7221ee9861 315
daqn 0:2a7221ee9861 316 /**function which allows to produce the offset values for gyro and accelerometer.
daqn 0:2a7221ee9861 317 * offset for gyro is simply a value, which needs to be substracted from original gyro rad/sec speed
daqn 0:2a7221ee9861 318 * but offset for accelerometer is calculated in angles... later on might change that
daqn 0:2a7221ee9861 319 * function simply takes the number of samples to be taken and calculated the average
daqn 0:2a7221ee9861 320 *
daqn 0:2a7221ee9861 321 * @param accOffset - accelerometer offset in angle
daqn 0:2a7221ee9861 322 * @param gyroOffset - gyroscope offset in rad/s
daqn 0:2a7221ee9861 323 * @param sampleSize - number of samples to be taken for calculating offsets
daqn 0:2a7221ee9861 324 *
daqn 0:2a7221ee9861 325 */
daqn 0:2a7221ee9861 326 void getOffset(float *accOffset, float *gyroOffset, int sampleSize);
daqn 0:2a7221ee9861 327
daqn 0:2a7221ee9861 328 /**
daqn 0:2a7221ee9861 329 * function for computing the angle, when accelerometer angle offset and gyro offset are both known.
daqn 0:2a7221ee9861 330 * we also need to know how much time passed from previous calculation to now
daqn 0:2a7221ee9861 331 * it produces the angle in degrees. However angles are produced from -90.0 to 90.0 degrees
daqn 0:2a7221ee9861 332 * if anyone need smth different, they can update this library...
daqn 0:2a7221ee9861 333 *
daqn 0:2a7221ee9861 334 * @param angle - calculated accurate angle from complemetary filter
daqn 0:2a7221ee9861 335 * @param accOffset - offset in angle for the accelerometer
daqn 0:2a7221ee9861 336 * @param gyroOffset - offset in rad/s for the gyroscope
daqn 0:2a7221ee9861 337 * @param interval - time before previous angle calculation and now
daqn 0:2a7221ee9861 338 *
daqn 0:2a7221ee9861 339 */
daqn 0:2a7221ee9861 340 void computeAngle (float *angle, float *accOffset, float *gyroOffset, float interval);
daqn 0:2a7221ee9861 341
daqn 0:2a7221ee9861 342 ///function, which enables interrupts on MPU9250 INT pin
daqn 0:2a7221ee9861 343 void enableInt( void );
daqn 0:2a7221ee9861 344
daqn 0:2a7221ee9861 345 ///disables interrupts
daqn 0:2a7221ee9861 346 void disableInt( void );
daqn 0:2a7221ee9861 347
daqn 0:2a7221ee9861 348 /**function which sets the alpha value - constant for the complementary filter. default alpha = 0.97
daqn 0:2a7221ee9861 349 *
daqn 0:2a7221ee9861 350 * @param val - value the alpha (complementary filter constant) should be set to
daqn 0:2a7221ee9861 351 *
daqn 0:2a7221ee9861 352 */
daqn 0:2a7221ee9861 353 void setAlpha(float val);
daqn 0:2a7221ee9861 354
daqn 0:2a7221ee9861 355 ////////////////////////////////////////////////////////////////////////////
daqn 0:2a7221ee9861 356 ////////////////////////////////////////////////////////////////////////////
daqn 0:2a7221ee9861 357 ////////////////////////////////////////////////////////////////////////////
daqn 0:2a7221ee9861 358
daqn 0:2a7221ee9861 359 /** Daqn added
daqn 0:2a7221ee9861 360 * read bytes on specific address and subaddress.
daqn 0:2a7221ee9861 361 *
daqn 0:2a7221ee9861 362 * @param adress - register address to write to
daqn 0:2a7221ee9861 363 * @param subadress - register address to write to
daqn 0:2a7221ee9861 364 * @param length - number of bytes to read
daqn 0:2a7221ee9861 365 * @param data - pointer where the data needs to be written to
daqn 0:2a7221ee9861 366 */
daqn 0:2a7221ee9861 367 void read(char address, char subaddress, char *data, int length);
daqn 0:2a7221ee9861 368
daqn 0:2a7221ee9861 369 /** Daqn added
daqn 0:2a7221ee9861 370 * Sets the Magneto full-scale range
daqn 0:2a7221ee9861 371 *
daqn 0:2a7221ee9861 372 * Macros: MPU9250_MAGNETO_RANGE_250 - MPU9250_MAGNETO_RANGE_500 - MPU9250_MAGNETO_RANGE_1000 - MPU9250_MAGNETO_RANGE_2000
daqn 0:2a7221ee9861 373 *
daqn 0:2a7221ee9861 374 * @param range - The two bits that set the full-scale range (use the predefined macros)
daqn 0:2a7221ee9861 375 */
daqn 0:2a7221ee9861 376 // void setMagnetoRange(char range);
daqn 0:2a7221ee9861 377
daqn 0:2a7221ee9861 378 /** Daqn added
daqn 0:2a7221ee9861 379 * Reads the magnetometer x-axis.
daqn 0:2a7221ee9861 380 *
daqn 0:2a7221ee9861 381 * @return 16-bit signed integer x-axis magnetometer data
daqn 0:2a7221ee9861 382 */
daqn 0:2a7221ee9861 383 int getMagnetoRawX( void );
daqn 0:2a7221ee9861 384
daqn 0:2a7221ee9861 385 /** Daqn added
daqn 0:2a7221ee9861 386 * Reads the magnetometer y-axis.
daqn 0:2a7221ee9861 387 *
daqn 0:2a7221ee9861 388 * @return 16-bit signed integer y-axis magnetometer data
daqn 0:2a7221ee9861 389 */
daqn 0:2a7221ee9861 390 int getMagnetoRawY( void );
daqn 0:2a7221ee9861 391
daqn 0:2a7221ee9861 392 /** Daqn added
daqn 0:2a7221ee9861 393 * Reads the magnetometer z-axis.
daqn 0:2a7221ee9861 394 *
daqn 0:2a7221ee9861 395 * @return 16-bit signed integer z-axis magnetometer data
daqn 0:2a7221ee9861 396 */
daqn 0:2a7221ee9861 397 int getMagnetoRawZ( void );
daqn 0:2a7221ee9861 398
daqn 0:2a7221ee9861 399 /** Daqn added
daqn 0:2a7221ee9861 400 * Reads all magnetometer data.
daqn 0:2a7221ee9861 401 *
daqn 0:2a7221ee9861 402 * @param data - pointer to signed integer array with length three: data[0] = X, data[1] = Y, data[2] = Z
daqn 0:2a7221ee9861 403 */
daqn 0:2a7221ee9861 404 void getMagnetoRaw( int *data );
daqn 0:2a7221ee9861 405
daqn 0:2a7221ee9861 406 /** Daqn added
daqn 0:2a7221ee9861 407 * Reads all magnetometer data, gives the magnetometer in [[[TBD]]]
daqn 0:2a7221ee9861 408 *
daqn 0:2a7221ee9861 409 * Function uses the last setup value of the full scale range, if you manually set in another range, this won't work.
daqn 0:2a7221ee9861 410 *
daqn 0:2a7221ee9861 411 * @param data - pointer to float array with length three: data[0] = X, data[1] = Y, data[2] = Z
daqn 0:2a7221ee9861 412 */
daqn 0:2a7221ee9861 413 void getMagneto( float *data);
daqn 0:2a7221ee9861 414
daqn 0:2a7221ee9861 415 private:
daqn 0:2a7221ee9861 416
daqn 0:2a7221ee9861 417 I2C connection;
daqn 0:2a7221ee9861 418 char currentAcceleroRange;
daqn 0:2a7221ee9861 419 char currentGyroRange;
daqn 0:2a7221ee9861 420 float alpha;
daqn 0:2a7221ee9861 421
daqn 0:2a7221ee9861 422 };
daqn 0:2a7221ee9861 423
daqn 0:2a7221ee9861 424
daqn 0:2a7221ee9861 425
daqn 0:2a7221ee9861 426 #endif