CONFIGURACION
myMPU9250.h
- Committer:
- flozada
- Date:
- 2020-02-06
- Revision:
- 0:d173af3ca217
File content as of revision 0:d173af3ca217:
#ifndef MYMPU9250_H #define MYMPU9250_H #include "mpu9250Define.h" class MyMPU9250 { public: MyMPU9250() : pc_(USBTX, USBRX), i2c_(p28, p27) { accelLSB2MG_ = 10.0; gyroLSB2DegPerSec_ = 0.0; }; bool initialize() { i2c_.frequency(400000); i2c_.start(); wait(0.5); char cmd[2] = { 0x00 }; cmd[0] = PWR_MGMT_1; // 0x6B cmd[1] = (PWR_MGMT_1_CLKSEL_0); // 0x00 this->write(cmd, BIT_2); wait(0.5); char i_am[1] = { 0x00 }; if(! this->read(WHO_AM_I, i_am, BIT_1)) { pc_.printf("Fail to read! I am %x\n", i_am[0]); return false; } else if(!(i_am[0] == 0x71)) { pc_.printf("Fail to identify! I am %x\n", i_am[0]); return false; } return true; }; void setup(AccelSensitivity accel_mode=AFS_SEL_2, GyroSensitivity gyro_mode=FS_SEL_250) { char cmd[2] = { 0x00 }; cmd[0] = ACCEL_CONFIG; cmd[1] = ACCEL_CONFIG_AFS_SEL_2;//(0x18); this->write(cmd, BIT_2); accelLSB2MG_ = getAccelLSB2MG(accel_mode); pc_.printf("accelLSB2MG: %f, %x", accelLSB2MG_, cmd[1]); cmd[0] = GYRO_CONFIG; cmd[1] = getGyroSensitivity(gyro_mode);//(0x18); this->write(cmd, BIT_2); gyroLSB2DegPerSec_ = getGyroLSB2DegPerSec(gyro_mode); cmd[0] = INT_PIN_CFG; // 0x37 cmd[1] = (INT_PIN_DFG_I2C_BYPASS_EN); // 0x02 this->write(cmd, BIT_2); }; bool updateAccelAllAxes() { return this->read(ACCEL_XOUT_H, accel_all_, BIT_6); }; int accelXRaw() { return (int16_t)(accel_all_[0]*0x100 + accel_all_[1]) ; }; double accelX() { return accelLSB2MG_ * accelXRaw() ; }; int accelYRaw() { return (int16_t)(accel_all_[2]*0x100 + accel_all_[3]) ; }; double accelY() { return accelLSB2MG_ * accelYRaw() ; }; int accelZRaw() { return (int16_t)(accel_all_[4]*0x100 + accel_all_[5]) ; }; double accelZ() { return accelLSB2MG_ * accelZRaw() ; }; bool updateGyroAllAxes() { return this->read(GYRO_XOUT_H, gyro_all_, BIT_6); }; int gyroXRaw() { return (int16_t)(gyro_all_[0]*0x100 + gyro_all_[1]) ; }; double gyroX() { return accelLSB2MG_ * gyroXRaw() ; }; int gyroYRaw() { return (int16_t)(gyro_all_[2]*0x100 + gyro_all_[3]) ; }; double gyroY() { return accelLSB2MG_ * gyroYRaw() ; }; int gyroZRaw() { return (int16_t)(gyro_all_[4]*0x100 + gyro_all_[5]) ; }; double gyroZ() { return accelLSB2MG_ * gyroZRaw() ; }; private: Serial pc_; I2C i2c_; float accelLSB2MG_; float gyroLSB2DegPerSec_; char accel_all_[6]; char gyro_all_[6]; bool write(char* _cmd, int _length) { int w_status = i2c_.write(MPU9250_ADDRESS, _cmd, _length, false); if(w_status == 0) { return true; } else { pc_.printf("write register: %x \n", _cmd[0]); pc_.printf(" write: %d \n", w_status); return false; } } bool read(char _register, char* _data, int _length) { char cmd[1] = { _register }; int w_status = i2c_.write(MPU9250_ADDRESS, cmd, BIT_1, false); int r_status = i2c_.read(MPU9250_ADDRESS, _data, _length, false); if(w_status + r_status == 0) { return true; } else { pc_.printf("write register: %x \n", cmd[0]); pc_.printf("read register: %x \n", _register); pc_.printf(" write: %d | read: %d \n", w_status, r_status); return false; } }; }; #endif /* MYMPU9250_H */