mpu9250のライブラリ、I2Cを利用。
Dependents: Hybrid_AttitudeEstimation Hybrid_main_FirstEdtion rocket_logger_sinkan2018_v1 HYBRYD2018_IZU_ROCKET ... more
Fork of mpu9250_i2c by
mpu9250_i2c.h
- Committer:
- Gaku0606
- Date:
- 2017-01-09
- Revision:
- 0:d36bfb8300a2
- Child:
- 1:6a4c2f84180b
File content as of revision 0:d36bfb8300a2:
#ifndef _MPU9250_I2C_H_ #define _MPU9250_I2C_H_ #define SLAVE_ADDR_LOW (0b1101000 << 1)//AD0 == LOW #define SLAVE_ADDR_HIGH (0b1101001 << 1)//AD0 == HIGH #define MAG_ADDR (0b0001100 << 1) #define WRITE_FLAG 0b00000000 #define READ_FLAG 0b00000001 #define CONFIG 0x1A #define GYRO_CONFIG 0x1B #define ACCEL_CONFIG 0x1C #define ACCEL_CONFIG2 0x1D #define LP_ACCEL_ODR 0x1E #define INT_PIN_CFG 0x37 #define ACCEL_XOUT_H 0x3B #define ACCEL_XOUT_L 0x3C #define ACCEL_YOUT_H 0x3D #define ACCEL_YOUT_L 0x3E #define ACCLE_ZOUT_H 0x3F #define ACCEL_ZOUT_L 0x40 #define TEMP_OUT_H 0x41 #define TEMP_OUT_L 0x42 #define GYRO_XOUT_H 0x43 #define GYRO_XOUT_L 0x44 #define GYRO_YOUT_H 0x45 #define GYRO_YOUT_L 0x46 #define GYRO_ZOUT_H 0x47 #define GYRO_ZOUT_L 0x48 #define WHO_AM_I 0x75 //0x71ならおk #define XG_OFFSET_H 0x13 #define XG_OFFSET_L 0x14 #define YG_OFFSET_H 0x15 #define YG_OFFSET_L 0x16 #define ZG_OFFSET_H 0x17 #define ZG_OFFSET_L 0x18 #define XA_OFFSET_H 0x77 #define XA_OFFSET_L 0x78 #define YA_OFFSET_H 0x79 #define YA_OFFERT_L 0x80 #define ZA_OFFSET_H 0x81 #define ZA_OFFSET_L 0x82 #define WIA 0x00 //device ID #define INFO 0x01 #define ST1 0x02 #define HXL 0x03//Low -> Highの順に注意 #define HXH 0x04 #define HYL 0x05 #define HYH 0x06 #define HZL 0x07 #define HZH 0x08 #define ST2 0x09 #define CNTL1 0x0A #define CNTL2 0x0B #define ACC_LSB (0.0000610350)//[G / LSB] #define GYRO_LSB (0.007630) //[(degree / s) / LSB] #define MAG_LSB (0.150) //[uT / LSB] typedef enum AD0{ AD0_HIGH = 1, AD0_LOW = 0 }ad0; typedef enum ACC_RANGE{ _2G = 1, _4G = 2, _8G = 4, _16G = 8 }acc_range; typedef enum GYRO_RANGE{ _250DPS = 1, _500DPS = 2, _1000DPS = 4, _2000DPS = 8 }gyro_range; typedef enum MAG_RATE{ _8HZ = 0, _100HZ = 1 }mag_rate; typedef enum A_BAND_WIDTH{ NO_USE = 0b00000000, _460HZ = 0b00001000, _184HZ = 0b00001001, _92HZ = 0b00001010, _41HZ = 0b00001011, _20HZ = 0b00001100, _10HZ = 0b00001101, _5HZ = 0b00001110, }a_band_width; class mpu9250{ public: mpu9250(I2C &_i2c, AD0 celect); I2C *_nine; public: void writeReg(char addr, char data); void writeReg(char addr, char reg, char data); char readReg(char addr, char reg); void readReg(char addr, char start_reg, char* buff, char num); bool senserTest(); bool mag_senserTest(); void setAcc(ACC_RANGE a_range); void setGyro(GYRO_RANGE g_range); void setMag(MAG_RATE rate); void init(); void frequency(int Hz); void setAccLPF(A_BAND_WIDTH band); void setOffset(double ax, double ay, double az, double gx, double gy, double gz, double mx, double my, double mz); void getAcc(double *ax, double *ay, double *az); void getAcc(double *acc); void getGyro(double *gx, double *gy, double *gz); void getGyro(double *gyro); void getMag(double *mx, double *my, double *mz); void getMag(double *mag); void getGyroAcc(double *imu);//gx,gy,gz,ax,ay,az static char _addr; static double acc_coef;//coefficient static double gyro_coef; static double mag_coef; static double acc_offset[3]; static double gyro_offset[3]; static double mag_offset[3]; }; inline void mpu9250::writeReg(char addr, char data){ _nine->write( addr | WRITE_FLAG, &data, 1, false); } inline void mpu9250::writeReg(char addr, char reg, char data){ char temp[2] = { reg, data}; _nine->write(addr | WRITE_FLAG, temp, 2, false); } inline char mpu9250::readReg(char addr, char reg){ char buff[1]; writeReg(addr, reg); _nine->read(addr | READ_FLAG, buff, 1, true); return buff[0]; } inline void mpu9250::readReg(char addr, char start_reg, char* buff, char num){ writeReg(addr, start_reg); _nine->read(addr | READ_FLAG, buff, num, true); } #endif