Fully integrated ToF/IMU codes

Dependencies:   QEI2 PID Watchdog VL53L1X_Filter ros_lib_kinetic

Committer:
isagmz
Date:
Tue Jul 09 17:52:32 2019 +0000
Revision:
21:d1faccb96146
Finished IMU side sensor code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
isagmz 21:d1faccb96146 1 /**
isagmz 21:d1faccb96146 2 * Includes
isagmz 21:d1faccb96146 3 */
isagmz 21:d1faccb96146 4 #include "MPU6050.h"
isagmz 21:d1faccb96146 5
isagmz 21:d1faccb96146 6 MPU6050::MPU6050(PinName sda, PinName scl) : connection(sda, scl) {
isagmz 21:d1faccb96146 7 this->setSleepMode(false);
isagmz 21:d1faccb96146 8
isagmz 21:d1faccb96146 9 //Initializations:
isagmz 21:d1faccb96146 10 currentGyroRange = 0;
isagmz 21:d1faccb96146 11 currentAcceleroRange=0;
isagmz 21:d1faccb96146 12 alpha = ALPHA;
isagmz 21:d1faccb96146 13 }
isagmz 21:d1faccb96146 14
isagmz 21:d1faccb96146 15 //--------------------------------------------------
isagmz 21:d1faccb96146 16 //-------------------General------------------------
isagmz 21:d1faccb96146 17 //--------------------------------------------------
isagmz 21:d1faccb96146 18
isagmz 21:d1faccb96146 19 void MPU6050::write(char address, char data) {
isagmz 21:d1faccb96146 20 char temp[2];
isagmz 21:d1faccb96146 21 temp[0]=address;
isagmz 21:d1faccb96146 22 temp[1]=data;
isagmz 21:d1faccb96146 23
isagmz 21:d1faccb96146 24 connection.write(MPU6050_ADDRESS * 2,temp,2);
isagmz 21:d1faccb96146 25 }
isagmz 21:d1faccb96146 26
isagmz 21:d1faccb96146 27 char MPU6050::read(char address) {
isagmz 21:d1faccb96146 28 char retval;
isagmz 21:d1faccb96146 29 connection.write(MPU6050_ADDRESS * 2, &address, 1, true);
isagmz 21:d1faccb96146 30 connection.read(MPU6050_ADDRESS * 2, &retval, 1);
isagmz 21:d1faccb96146 31 return retval;
isagmz 21:d1faccb96146 32 }
isagmz 21:d1faccb96146 33
isagmz 21:d1faccb96146 34 void MPU6050::read(char address, char *data, int length) {
isagmz 21:d1faccb96146 35 connection.write(MPU6050_ADDRESS * 2, &address, 1, true);
isagmz 21:d1faccb96146 36 connection.read(MPU6050_ADDRESS * 2, data, length);
isagmz 21:d1faccb96146 37 }
isagmz 21:d1faccb96146 38
isagmz 21:d1faccb96146 39 void MPU6050::setSleepMode(bool state) {
isagmz 21:d1faccb96146 40 char temp;
isagmz 21:d1faccb96146 41 temp = this->read(MPU6050_PWR_MGMT_1_REG);
isagmz 21:d1faccb96146 42 if (state == true)
isagmz 21:d1faccb96146 43 temp |= 1<<MPU6050_SLP_BIT;
isagmz 21:d1faccb96146 44 if (state == false)
isagmz 21:d1faccb96146 45 temp &= ~(1<<MPU6050_SLP_BIT);
isagmz 21:d1faccb96146 46 this->write(MPU6050_PWR_MGMT_1_REG, temp);
isagmz 21:d1faccb96146 47 }
isagmz 21:d1faccb96146 48
isagmz 21:d1faccb96146 49 bool MPU6050::testConnection( void ) {
isagmz 21:d1faccb96146 50 char temp;
isagmz 21:d1faccb96146 51 temp = this->read(MPU6050_WHO_AM_I_REG);
isagmz 21:d1faccb96146 52 return (temp == (MPU6050_ADDRESS & 0xFE));
isagmz 21:d1faccb96146 53 }
isagmz 21:d1faccb96146 54
isagmz 21:d1faccb96146 55 void MPU6050::setBW(char BW) {
isagmz 21:d1faccb96146 56 char temp;
isagmz 21:d1faccb96146 57 BW=BW & 0x07;
isagmz 21:d1faccb96146 58 temp = this->read(MPU6050_CONFIG_REG);
isagmz 21:d1faccb96146 59 temp &= 0xF8;
isagmz 21:d1faccb96146 60 temp = temp + BW;
isagmz 21:d1faccb96146 61 this->write(MPU6050_CONFIG_REG, temp);
isagmz 21:d1faccb96146 62 }
isagmz 21:d1faccb96146 63
isagmz 21:d1faccb96146 64 void MPU6050::setI2CBypass(bool state) {
isagmz 21:d1faccb96146 65 char temp;
isagmz 21:d1faccb96146 66 temp = this->read(MPU6050_INT_PIN_CFG);
isagmz 21:d1faccb96146 67 if (state == true)
isagmz 21:d1faccb96146 68 temp |= 1<<MPU6050_BYPASS_BIT;
isagmz 21:d1faccb96146 69 if (state == false)
isagmz 21:d1faccb96146 70 temp &= ~(1<<MPU6050_BYPASS_BIT);
isagmz 21:d1faccb96146 71 this->write(MPU6050_INT_PIN_CFG, temp);
isagmz 21:d1faccb96146 72 }
isagmz 21:d1faccb96146 73
isagmz 21:d1faccb96146 74 //--------------------------------------------------
isagmz 21:d1faccb96146 75 //----------------Accelerometer---------------------
isagmz 21:d1faccb96146 76 //--------------------------------------------------
isagmz 21:d1faccb96146 77
isagmz 21:d1faccb96146 78 void MPU6050::setAcceleroRange( char range ) {
isagmz 21:d1faccb96146 79 char temp;
isagmz 21:d1faccb96146 80 range = range & 0x03;
isagmz 21:d1faccb96146 81 currentAcceleroRange = range;
isagmz 21:d1faccb96146 82
isagmz 21:d1faccb96146 83 temp = this->read(MPU6050_ACCELERO_CONFIG_REG);
isagmz 21:d1faccb96146 84 temp &= ~(3<<3);
isagmz 21:d1faccb96146 85 temp = temp + (range<<3);
isagmz 21:d1faccb96146 86 this->write(MPU6050_ACCELERO_CONFIG_REG, temp);
isagmz 21:d1faccb96146 87 }
isagmz 21:d1faccb96146 88
isagmz 21:d1faccb96146 89 int MPU6050::getAcceleroRawX( void ) {
isagmz 21:d1faccb96146 90 short retval;
isagmz 21:d1faccb96146 91 char data[2];
isagmz 21:d1faccb96146 92 this->read(MPU6050_ACCEL_XOUT_H_REG, data, 2);
isagmz 21:d1faccb96146 93 retval = (data[0]<<8) + data[1];
isagmz 21:d1faccb96146 94 return (int)retval;
isagmz 21:d1faccb96146 95 }
isagmz 21:d1faccb96146 96
isagmz 21:d1faccb96146 97 int MPU6050::getAcceleroRawY( void ) {
isagmz 21:d1faccb96146 98 short retval;
isagmz 21:d1faccb96146 99 char data[2];
isagmz 21:d1faccb96146 100 this->read(MPU6050_ACCEL_YOUT_H_REG, data, 2);
isagmz 21:d1faccb96146 101 retval = (data[0]<<8) + data[1];
isagmz 21:d1faccb96146 102 return (int)retval;
isagmz 21:d1faccb96146 103 }
isagmz 21:d1faccb96146 104
isagmz 21:d1faccb96146 105 int MPU6050::getAcceleroRawZ( void ) {
isagmz 21:d1faccb96146 106 short retval;
isagmz 21:d1faccb96146 107 char data[2];
isagmz 21:d1faccb96146 108 this->read(MPU6050_ACCEL_ZOUT_H_REG, data, 2);
isagmz 21:d1faccb96146 109 retval = (data[0]<<8) + data[1];
isagmz 21:d1faccb96146 110 return (int)retval;
isagmz 21:d1faccb96146 111 }
isagmz 21:d1faccb96146 112
isagmz 21:d1faccb96146 113 void MPU6050::getAcceleroRaw( int *data ) {
isagmz 21:d1faccb96146 114 char temp[6];
isagmz 21:d1faccb96146 115 this->read(MPU6050_ACCEL_XOUT_H_REG, temp, 6);
isagmz 21:d1faccb96146 116 data[0] = (int)(short)((temp[0]<<8) + temp[1]);
isagmz 21:d1faccb96146 117 data[1] = (int)(short)((temp[2]<<8) + temp[3]);
isagmz 21:d1faccb96146 118 data[2] = (int)(short)((temp[4]<<8) + temp[5]);
isagmz 21:d1faccb96146 119 }
isagmz 21:d1faccb96146 120
isagmz 21:d1faccb96146 121 void MPU6050::getAccelero( float *data ) {
isagmz 21:d1faccb96146 122 int temp[3];
isagmz 21:d1faccb96146 123 this->getAcceleroRaw(temp);
isagmz 21:d1faccb96146 124 if (currentAcceleroRange == MPU6050_ACCELERO_RANGE_2G) {
isagmz 21:d1faccb96146 125 data[0]=(float)temp[0] / 16384.0 * 9.81;
isagmz 21:d1faccb96146 126 data[1]=(float)temp[1] / 16384.0 * 9.81;
isagmz 21:d1faccb96146 127 data[2]=(float)temp[2] / 16384.0 * 9.81;
isagmz 21:d1faccb96146 128 }
isagmz 21:d1faccb96146 129 if (currentAcceleroRange == MPU6050_ACCELERO_RANGE_4G){
isagmz 21:d1faccb96146 130 data[0]=(float)temp[0] / 8192.0 * 9.81;
isagmz 21:d1faccb96146 131 data[1]=(float)temp[1] / 8192.0 * 9.81;
isagmz 21:d1faccb96146 132 data[2]=(float)temp[2] / 8192.0 * 9.81;
isagmz 21:d1faccb96146 133 }
isagmz 21:d1faccb96146 134 if (currentAcceleroRange == MPU6050_ACCELERO_RANGE_8G){
isagmz 21:d1faccb96146 135 data[0]=(float)temp[0] / 4096.0 * 9.81;
isagmz 21:d1faccb96146 136 data[1]=(float)temp[1] / 4096.0 * 9.81;
isagmz 21:d1faccb96146 137 data[2]=(float)temp[2] / 4096.0 * 9.81;
isagmz 21:d1faccb96146 138 }
isagmz 21:d1faccb96146 139 if (currentAcceleroRange == MPU6050_ACCELERO_RANGE_16G){
isagmz 21:d1faccb96146 140 data[0]=(float)temp[0] / 2048.0 * 9.81;
isagmz 21:d1faccb96146 141 data[1]=(float)temp[1] / 2048.0 * 9.81;
isagmz 21:d1faccb96146 142 data[2]=(float)temp[2] / 2048.0 * 9.81;
isagmz 21:d1faccb96146 143 }
isagmz 21:d1faccb96146 144
isagmz 21:d1faccb96146 145 #ifdef DOUBLE_ACCELERO
isagmz 21:d1faccb96146 146 data[0]*=2;
isagmz 21:d1faccb96146 147 data[1]*=2;
isagmz 21:d1faccb96146 148 data[2]*=2;
isagmz 21:d1faccb96146 149 #endif
isagmz 21:d1faccb96146 150 }
isagmz 21:d1faccb96146 151 //--------------------------------------------------
isagmz 21:d1faccb96146 152 //------------------Gyroscope-----------------------
isagmz 21:d1faccb96146 153 //--------------------------------------------------
isagmz 21:d1faccb96146 154 void MPU6050::setGyroRange( char range ) {
isagmz 21:d1faccb96146 155 char temp;
isagmz 21:d1faccb96146 156 currentGyroRange = range;
isagmz 21:d1faccb96146 157 range = range & 0x03;
isagmz 21:d1faccb96146 158 temp = this->read(MPU6050_GYRO_CONFIG_REG);
isagmz 21:d1faccb96146 159 temp &= ~(3<<3);
isagmz 21:d1faccb96146 160 temp = temp + range<<3;
isagmz 21:d1faccb96146 161 this->write(MPU6050_GYRO_CONFIG_REG, temp);
isagmz 21:d1faccb96146 162 }
isagmz 21:d1faccb96146 163
isagmz 21:d1faccb96146 164 int MPU6050::getGyroRawX( void ) {
isagmz 21:d1faccb96146 165 short retval;
isagmz 21:d1faccb96146 166 char data[2];
isagmz 21:d1faccb96146 167 this->read(MPU6050_GYRO_XOUT_H_REG, data, 2);
isagmz 21:d1faccb96146 168 retval = (data[0]<<8) + data[1];
isagmz 21:d1faccb96146 169 return (int)retval;
isagmz 21:d1faccb96146 170 }
isagmz 21:d1faccb96146 171
isagmz 21:d1faccb96146 172 int MPU6050::getGyroRawY( void ) {
isagmz 21:d1faccb96146 173 short retval;
isagmz 21:d1faccb96146 174 char data[2];
isagmz 21:d1faccb96146 175 this->read(MPU6050_GYRO_YOUT_H_REG, data, 2);
isagmz 21:d1faccb96146 176 retval = (data[0]<<8) + data[1];
isagmz 21:d1faccb96146 177 return (int)retval;
isagmz 21:d1faccb96146 178 }
isagmz 21:d1faccb96146 179
isagmz 21:d1faccb96146 180 int MPU6050::getGyroRawZ( void ) {
isagmz 21:d1faccb96146 181 short retval;
isagmz 21:d1faccb96146 182 char data[2];
isagmz 21:d1faccb96146 183 this->read(MPU6050_GYRO_ZOUT_H_REG, data, 2);
isagmz 21:d1faccb96146 184 retval = (data[0]<<8) + data[1];
isagmz 21:d1faccb96146 185 return (int)retval;
isagmz 21:d1faccb96146 186 }
isagmz 21:d1faccb96146 187
isagmz 21:d1faccb96146 188 void MPU6050::getGyroRaw( int *data ) {
isagmz 21:d1faccb96146 189 char temp[6];
isagmz 21:d1faccb96146 190 this->read(MPU6050_GYRO_XOUT_H_REG, temp, 6);
isagmz 21:d1faccb96146 191 data[0] = (int)(short)((temp[0]<<8) + temp[1]);
isagmz 21:d1faccb96146 192 data[1] = (int)(short)((temp[2]<<8) + temp[3]);
isagmz 21:d1faccb96146 193 data[2] = (int)(short)((temp[4]<<8) + temp[5]);
isagmz 21:d1faccb96146 194 }
isagmz 21:d1faccb96146 195
isagmz 21:d1faccb96146 196 void MPU6050::getGyro( float *data ) {
isagmz 21:d1faccb96146 197 int temp[3];
isagmz 21:d1faccb96146 198 this->getGyroRaw(temp);
isagmz 21:d1faccb96146 199 if (currentGyroRange == MPU6050_GYRO_RANGE_250) {
isagmz 21:d1faccb96146 200 data[0]=(float)temp[0] / 301.0;
isagmz 21:d1faccb96146 201 data[1]=(float)temp[1] / 301.0;
isagmz 21:d1faccb96146 202 data[2]=(float)temp[2] / 301.0;
isagmz 21:d1faccb96146 203 } //7505.5
isagmz 21:d1faccb96146 204 if (currentGyroRange == MPU6050_GYRO_RANGE_500){
isagmz 21:d1faccb96146 205 data[0]=(float)temp[0] / 3752.9;
isagmz 21:d1faccb96146 206 data[1]=(float)temp[1] / 3752.9;
isagmz 21:d1faccb96146 207 data[2]=(float)temp[2] / 3752.9;
isagmz 21:d1faccb96146 208 }
isagmz 21:d1faccb96146 209 if (currentGyroRange == MPU6050_GYRO_RANGE_1000){
isagmz 21:d1faccb96146 210 data[0]=(float)temp[0]/ 1879.3;
isagmz 21:d1faccb96146 211 data[1]=(float)temp[1] / 1879.3;
isagmz 21:d1faccb96146 212 data[2]=(float)temp[2] / 1879.3;
isagmz 21:d1faccb96146 213
isagmz 21:d1faccb96146 214 }
isagmz 21:d1faccb96146 215 if (currentGyroRange == MPU6050_GYRO_RANGE_2000){
isagmz 21:d1faccb96146 216 data[0]=(float)temp[0] / 939.7;
isagmz 21:d1faccb96146 217 data[1]=(float)temp[1] / 939.7;
isagmz 21:d1faccb96146 218 data[2]=(float)temp[2] / 939.7;
isagmz 21:d1faccb96146 219 }
isagmz 21:d1faccb96146 220
isagmz 21:d1faccb96146 221 }
isagmz 21:d1faccb96146 222 //--------------------------------------------------
isagmz 21:d1faccb96146 223 //-------------------Temperature--------------------
isagmz 21:d1faccb96146 224 //--------------------------------------------------
isagmz 21:d1faccb96146 225 int MPU6050::getTempRaw( void ) {
isagmz 21:d1faccb96146 226 short retval;
isagmz 21:d1faccb96146 227 char data[2];
isagmz 21:d1faccb96146 228 this->read(MPU6050_TEMP_H_REG, data, 2);
isagmz 21:d1faccb96146 229 retval = (data[0]<<8) + data[1];
isagmz 21:d1faccb96146 230 return (int)retval;
isagmz 21:d1faccb96146 231 }
isagmz 21:d1faccb96146 232
isagmz 21:d1faccb96146 233 float MPU6050::getTemp( void ) {
isagmz 21:d1faccb96146 234 float retval;
isagmz 21:d1faccb96146 235 retval=(float)this->getTempRaw();
isagmz 21:d1faccb96146 236 retval=(retval+521.0)/340.0+35.0;
isagmz 21:d1faccb96146 237 return retval;
isagmz 21:d1faccb96146 238 }
isagmz 21:d1faccb96146 239
isagmz 21:d1faccb96146 240 /**Additional function added by Montvydas Klumbys, which will allow easy offset, angle calculation and much more.
isagmz 21:d1faccb96146 241 function for getting angles in degrees from accelerometer
isagmz 21:d1faccb96146 242 */
isagmz 21:d1faccb96146 243 void MPU6050::getAcceleroAngle( float *data ) {
isagmz 21:d1faccb96146 244 float temp[3];
isagmz 21:d1faccb96146 245 this->getAccelero(temp);
isagmz 21:d1faccb96146 246
isagmz 21:d1faccb96146 247 data[X_AXIS] = atan (temp[Y_AXIS]/sqrt(pow(temp[X_AXIS], 2) + pow(temp[Z_AXIS], 2))) * RADIANS_TO_DEGREES; //calculate angle x(pitch/roll?) from accellerometer reading
isagmz 21:d1faccb96146 248 data[Y_AXIS] = atan (-1*temp[X_AXIS]/sqrt(pow(temp[Y_AXIS], 2) + pow(temp[Z_AXIS], 2))) * RADIANS_TO_DEGREES; //calculate angle x(pitch/roll?) from accellerometer reading
isagmz 21:d1faccb96146 249 data[Z_AXIS] = atan (sqrt(pow(temp[X_AXIS], 2) + pow(temp[Y_AXIS], 2))/temp[Z_AXIS]) * RADIANS_TO_DEGREES; //This one is not used anywhere later on
isagmz 21:d1faccb96146 250
isagmz 21:d1faccb96146 251 // data[Y_AXIS] = atan2 (temp[Y_AXIS],temp[Z_AXIS]) * RADIANS_TO_DEGREES; //This spits out values between -180 to 180 (360 degrees)
isagmz 21:d1faccb96146 252 // data[X_AXIS] = atan2 (-1*temp[X_AXIS], temp[Z_AXIS]) * RADIANS_TO_DEGREES; //but it takes longer and system gets unstable when angles ~90 degrees
isagmz 21:d1faccb96146 253 }
isagmz 21:d1faccb96146 254
isagmz 21:d1faccb96146 255 ///function for getting offset values for the gyro & accelerometer
isagmz 21:d1faccb96146 256 void MPU6050::getOffset(float *accOffset, float *gyroOffset, int sampleSize){
isagmz 21:d1faccb96146 257 float gyro[3];
isagmz 21:d1faccb96146 258 float accAngle[3];
isagmz 21:d1faccb96146 259
isagmz 21:d1faccb96146 260 for (int i = 0; i < 3; i++) {
isagmz 21:d1faccb96146 261 accOffset[i] = 0.0; //initialise offsets to 0.0
isagmz 21:d1faccb96146 262 gyroOffset[i] = 0.0;
isagmz 21:d1faccb96146 263 }
isagmz 21:d1faccb96146 264
isagmz 21:d1faccb96146 265 for (int i = 0; i < sampleSize; i++){
isagmz 21:d1faccb96146 266 this->getGyro(gyro); //take real life measurements
isagmz 21:d1faccb96146 267 this->getAcceleroAngle (accAngle);
isagmz 21:d1faccb96146 268
isagmz 21:d1faccb96146 269 for (int j = 0; j < 3; j++){
isagmz 21:d1faccb96146 270 *(accOffset+j) += accAngle[j]/sampleSize; //average measurements
isagmz 21:d1faccb96146 271 *(gyroOffset+j) += gyro[j]/sampleSize;
isagmz 21:d1faccb96146 272 }
isagmz 21:d1faccb96146 273 wait (0.01); //wait between each reading for accuracy
isagmz 21:d1faccb96146 274 }
isagmz 21:d1faccb96146 275 }
isagmz 21:d1faccb96146 276
isagmz 21:d1faccb96146 277 ///function for computing angles for roll, pitch anf yaw
isagmz 21:d1faccb96146 278 void MPU6050::computeAngle (float *angle, float *accOffset, float *gyroOffset, float interval){
isagmz 21:d1faccb96146 279 float gyro[3];
isagmz 21:d1faccb96146 280 float accAngle[3];
isagmz 21:d1faccb96146 281
isagmz 21:d1faccb96146 282 this->getGyro(gyro); //get gyro value in rad/s
isagmz 21:d1faccb96146 283 this->getAcceleroAngle(accAngle); //get angle from accelerometer
isagmz 21:d1faccb96146 284
isagmz 21:d1faccb96146 285 for (int i = 0; i < 3; i++){
isagmz 21:d1faccb96146 286 gyro[i] -= gyroOffset[i]; //substract offset values
isagmz 21:d1faccb96146 287 accAngle[i] -= accOffset[i];
isagmz 21:d1faccb96146 288 }
isagmz 21:d1faccb96146 289
isagmz 21:d1faccb96146 290 //apply filters on pitch and roll to get accurate angle values
isagmz 21:d1faccb96146 291 angle[X_AXIS] = alpha * (angle[X_AXIS] + GYRO_SCALE*gyro[X_AXIS]*interval) + (1-alpha)*accAngle[X_AXIS];
isagmz 21:d1faccb96146 292 angle[Y_AXIS] = alpha * (angle[Y_AXIS] + GYRO_SCALE*gyro[Y_AXIS]*interval) + (1-alpha)*accAngle[Y_AXIS];
isagmz 21:d1faccb96146 293
isagmz 21:d1faccb96146 294 //calculate Yaw using just the gyroscope values - inaccurate
isagmz 21:d1faccb96146 295 angle[Z_AXIS] = angle[Z_AXIS] + GYRO_SCALE*gyro[Z_AXIS]*interval;
isagmz 21:d1faccb96146 296 }
isagmz 21:d1faccb96146 297
isagmz 21:d1faccb96146 298 ///function for setting a different Alpha value, which is used in complemetary filter calculations
isagmz 21:d1faccb96146 299 void MPU6050::setAlpha(float val){
isagmz 21:d1faccb96146 300 alpha = val;
isagmz 21:d1faccb96146 301 }
isagmz 21:d1faccb96146 302
isagmz 21:d1faccb96146 303 ///function for enabling interrupts on MPU6050 INT pin, when the data is ready to take
isagmz 21:d1faccb96146 304 void MPU6050::enableInt( void ){
isagmz 21:d1faccb96146 305 char temp;
isagmz 21:d1faccb96146 306 temp = this->read(MPU6050_RA_INT_ENABLE);
isagmz 21:d1faccb96146 307 temp |= 0x01;
isagmz 21:d1faccb96146 308 this->write(MPU6050_RA_INT_ENABLE, temp);
isagmz 21:d1faccb96146 309 }
isagmz 21:d1faccb96146 310
isagmz 21:d1faccb96146 311 ///function for disabling interrupts on MPU6050 INT pin, when the data is ready to take
isagmz 21:d1faccb96146 312 void MPU6050::disableInt ( void ){
isagmz 21:d1faccb96146 313 char temp;
isagmz 21:d1faccb96146 314 temp = this->read(MPU6050_RA_INT_ENABLE);
isagmz 21:d1faccb96146 315 temp &= 0xFE;
isagmz 21:d1faccb96146 316 this->write(MPU6050_RA_INT_ENABLE, temp);
isagmz 21:d1faccb96146 317 }