ICM20602_I2C(invensense)---stm32f767zi
Fork of NTOUEE-mbed-I2C_MPU6500 by
Revision 2:74690f762c0f, committed 2017-07-19
- Comitter:
- sarahbest
- Date:
- Wed Jul 19 07:56:49 2017 +0000
- Parent:
- 1:b8d0e8f53e6c
- Commit message:
- icm20602 ouput 7 variables: acc 3, gyro 3, temp
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/icm20602_i2c.cpp Wed Jul 19 07:56:49 2017 +0000 @@ -0,0 +1,178 @@ +#include "mbed.h" +#include "icm20602_i2c.h" +//Serial pc1(USBTX,USBRX); +I2C ICM20602_i2c(D14,D15); // I2C0_SDA, I2C0_SCL + +// Acc Full Scale Range +-2G 4G 8G 16G +enum Ascale +{ + AFS_2G=0, + AFS_4G, + AFS_8G, + AFS_16G +}; + +// Gyro Full Scale Range +-250 500 1000 2000 Degrees per second +enum Gscale +{ + GFS_250DPS=0, + GFS_500DPS, + GFS_1000DPS, + GFS_2000DPS +}; + +// Scale resolutions per LSB for the sensors +float aRes, gRes; +int Ascale = AFS_2G; +int Gscale = GFS_1000DPS; + +void ICM20602_WriteByte(uint8_t ICM20602_reg, uint8_t ICM20602_data) +{ + char data_out[2]; + data_out[0]=ICM20602_reg; + data_out[1]=ICM20602_data; + ICM20602_i2c.write(ICM20602_slave_addr, data_out, 2, 0); +} + +uint8_t ICM20602_ReadByte(uint8_t ICM20602_reg) +{ + char data_out[1], data_in[1]; + data_out[0] = ICM20602_reg; + ICM20602_i2c.write(ICM20602_slave_addr, data_out, 1, 1); + ICM20602_i2c.read(ICM20602_slave_addr, data_in, 1, 0); + return (data_in[0]); +} + +// Communication test: WHO_AM_I register reading +void ICM20602::whoAmI() +{ + uint8_t whoAmI = ICM20602_ReadByte(ICM20602_WHO_AM_I); // Should return 0x68 + pc.printf("I AM ICM20602: 0x%x \r\n",whoAmI); + + if(whoAmI==0x12)//0x68) + { + pc.printf("ICM20602 is online... \r\n"); +// led2=1; +// ledToggle(2); + } + else + { + pc.printf("Could not connect to ICM20602 \r\nCheck the connections... \r\n"); +// toggler1.attach(&toggle_led1,0.1); // toggles led1 every 100 ms + } + +} + +void ICM20602::init() +{ + ICM20602_i2c.frequency(400000); + ICM20602_WriteByte(ICM20602_PWR_MGMT_1, 0x00); // CLK_SEL=0: internal 8MHz, TEMP_DIS=0, SLEEP=0 + ICM20602_WriteByte(ICM20602_SMPLRT_DIV, 0x07); // Gyro output sample rate = Gyro Output Rate/(1+SMPLRT_DIV) + ICM20602_WriteByte(ICM20602_CONFIG, 0x01); //176Hz // set TEMP_OUT_L, DLPF=3 (Fs=1KHz):0x03 +// ICM20602_WriteByte(ICM20602_GYRO_CONFIG, 0x00); // bit[4:3] 0=+-250d/s,1=+-500d/s,2=+-1000d/s,3=+-2000d/s :0x18 +// ICM20602_WriteByte(ICM20602_ACCEL_CONFIG, 0x00);// bit[4:3] 0=+-2g,1=+-4g,2=+-8g,3=+-16g, ACC_HPF=On (5Hz):0x01 + setAccRange(Ascale); + setGyroRange(Gscale); +} + +int16_t ICM20602::getAccXvalue() +{ + uint8_t LoByte, HiByte; + LoByte = ICM20602_ReadByte(ICM20602_ACCEL_XOUT_L); // read Accelerometer X_Low value + HiByte = ICM20602_ReadByte(ICM20602_ACCEL_XOUT_H); // read Accelerometer X_High value + return((HiByte<<8) | LoByte); +// pc1.printf("accx:%d,%d\r\n",HiByte,LoByte); // send data to matlab +} + +int16_t ICM20602::getAccYvalue() +{ + uint8_t LoByte, HiByte; + LoByte = ICM20602_ReadByte(ICM20602_ACCEL_YOUT_L); // read Accelerometer X_Low value + HiByte = ICM20602_ReadByte(ICM20602_ACCEL_YOUT_H); // read Accelerometer X_High value + return ((HiByte<<8) | LoByte); +} + +int16_t ICM20602::getAccZvalue() +{ + uint8_t LoByte, HiByte; + LoByte = ICM20602_ReadByte(ICM20602_ACCEL_ZOUT_L); // read Accelerometer X_Low value + HiByte = ICM20602_ReadByte(ICM20602_ACCEL_ZOUT_H); // read Accelerometer X_High value + return ((HiByte<<8) | LoByte); +} + +int16_t ICM20602::getGyrXvalue() +{ + uint8_t LoByte, HiByte; + LoByte = ICM20602_ReadByte(ICM20602_GYRO_XOUT_L); // read Accelerometer X_Low value + HiByte = ICM20602_ReadByte(ICM20602_GYRO_XOUT_H); // read Accelerometer X_High value + return ((HiByte<<8) | LoByte); +} + +int16_t ICM20602::getGyrYvalue() +{ + uint8_t LoByte, HiByte; + LoByte = ICM20602_ReadByte(ICM20602_GYRO_YOUT_L); // read Accelerometer X_Low value + HiByte = ICM20602_ReadByte(ICM20602_GYRO_YOUT_H); // read Accelerometer X_High value + return ((HiByte<<8) | LoByte); +} + +int16_t ICM20602::getGyrZvalue() +{ + uint8_t LoByte, HiByte; + LoByte = ICM20602_ReadByte(ICM20602_GYRO_ZOUT_L); // read Accelerometer X_Low value + HiByte = ICM20602_ReadByte(ICM20602_GYRO_ZOUT_H); // read Accelerometer X_High value + return ((HiByte<<8) | LoByte); +} + +int16_t ICM20602::getIMUTemp() +{ + uint8_t LoByte, HiByte; + LoByte = ICM20602_ReadByte(ICM20602_TEMP_OUT_L); // read Accelerometer X_Low value + HiByte = ICM20602_ReadByte(ICM20602_TEMP_OUT_H); // read Accelerometer X_High value + return ((HiByte<<8) | LoByte); +} + + +// Calculates Acc resolution +float ICM20602::setAccRange(int Ascale) +{ + switch(Ascale) + { + case AFS_2G: + aRes = 2.0/32768.0; + break; + case AFS_4G: + aRes = 4.0/32768.0; + break; + case AFS_8G: + aRes = 8.0/32768.0; + break; + case AFS_16G: + aRes = 16.0/32768.0; + break; + } + ICM20602_WriteByte(ICM20602_ACCEL_CONFIG, Ascale<<3);// bit[4:3] 0=+-2g,1=+-4g,2=+-8g,3=+-16g, ACC_HPF=On (5Hz) + return aRes; +} + +// Calculates Gyro resolution +float ICM20602::setGyroRange(int Gscale) +{ + switch(Gscale) + { + case GFS_250DPS: + gRes = 250.0/32768.0; + break; + case GFS_500DPS: + gRes = 500.0/32768.0; + break; + case GFS_1000DPS: + gRes = 1000.0/32768.0; + break; + case GFS_2000DPS: + gRes = 2000.0/32768.0; + break; + } + ICM20602_WriteByte(ICM20602_GYRO_CONFIG, Gscale<<3); // bit[4:3] 0=+-250d/s,1=+-500d/s,2=+-1000d/s,3=+-2000d/s + return gRes; +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/icm20602_i2c.h Wed Jul 19 07:56:49 2017 +0000 @@ -0,0 +1,131 @@ +#define ICM20602_SELF_TEST_X_ACCEL 0x0D +#define ICM20602_SELF_TEST_Y_ACCEL 0x0E +#define ICM20602_SELF_TEST_Z_ACCEL 0x0F +//#define SELF_TEST_A 0x10 +#define ICM20602_XG_OFFS_USRH 0x13 // User-defined trim values for gyroscope; supported in MPU-6050? +#define ICM20602_XG_OFFS_USRL 0x14 +#define ICM20602_YG_OFFS_USRH 0x15 +#define ICM20602_YG_OFFS_USRL 0x16 +#define ICM20602_ZG_OFFS_USRH 0x17 +#define ICM20602_ZG_OFFS_USRL 0x18 +#define ICM20602_SMPLRT_DIV 0x19 +#define ICM20602_CONFIG 0x1A +#define ICM20602_GYRO_CONFIG 0x1B +#define ICM20602_ACCEL_CONFIG 0x1C +#define ICM20602_ACCEL_CONFIG2 0x1D // Free-fall +#define ICM20602_LP_MODE_CFG 0x1E // Free-fall +#define ICM20602_ACCEL_WOM_THR 0x1F // Motion detection threshold bits [7:0] +//#define MOT_DUR 0x20 // Duration counter threshold for motion interrupt generation, 1 kHz rate, LSB = 1 ms +//#define ZMOT_THR 0x21 // Zero-motion detection threshold bits [7:0] +//#define ZRMOT_DUR 0x22 // Duration counter threshold for zero motion interrupt generation, 16 Hz rate, LSB = 64 ms +#define ICM20602_FIFO_EN 0x23 +//#define I2C_MST_CTRL 0x24 +//#define I2C_SLV0_ADDR 0x25 +//#define I2C_SLV0_REG 0x26 +//#define I2C_SLV0_CTRL 0x27 +//#define I2C_SLV1_ADDR 0x28 +//#define I2C_SLV1_REG 0x29 +//#define I2C_SLV1_CTRL 0x2A +//#define I2C_SLV2_ADDR 0x2B +//#define I2C_SLV2_REG 0x2C +//#define I2C_SLV2_CTRL 0x2D +//#define I2C_SLV3_ADDR 0x2E +//#define I2C_SLV3_REG 0x2F +//#define I2C_SLV3_CTRL 0x30 +//#define I2C_SLV4_ADDR 0x31 +//#define I2C_SLV4_REG 0x32 +//#define I2C_SLV4_DO 0x33 +//#define I2C_SLV4_CTRL 0x34 +//#define I2C_SLV4_DI 0x35 +#define ICM20602_FSYNC_INT 0x36 +#define ICM20602_INT_PIN_CFG 0x37 +#define ICM20602_INT_ENABLE 0x38 +//#define DMP_INT_STATUS 0x39 // Check DMP interrupt +#define ICM20602_INT_STATUS 0x3A +#define ICM20602_ACCEL_XOUT_H 0x3B +#define ICM20602_ACCEL_XOUT_L 0x3C +#define ICM20602_ACCEL_YOUT_H 0x3D +#define ICM20602_ACCEL_YOUT_L 0x3E +#define ICM20602_ACCEL_ZOUT_H 0x3F +#define ICM20602_ACCEL_ZOUT_L 0x40 +#define ICM20602_TEMP_OUT_H 0x41 +#define ICM20602_TEMP_OUT_L 0x42 +#define ICM20602_GYRO_XOUT_H 0x43 +#define ICM20602_GYRO_XOUT_L 0x44 +#define ICM20602_GYRO_YOUT_H 0x45 +#define ICM20602_GYRO_YOUT_L 0x46 +#define ICM20602_GYRO_ZOUT_H 0x47 +#define ICM20602_GYRO_ZOUT_L 0x48 +//#define EXT_SENS_DATA_00 0x49 +//#define EXT_SENS_DATA_01 0x4A +//#define EXT_SENS_DATA_02 0x4B +//#define EXT_SENS_DATA_03 0x4C +//#define EXT_SENS_DATA_04 0x4D +//#define EXT_SENS_DATA_05 0x4E +//#define EXT_SENS_DATA_06 0x4F +#define ICM20602_SELF_TEST_X_GYRO 0x50 +#define ICM20602_SELF_TEST_y_GYRO 0x51 +#define ICM20602_SELF_TEST_z_GYRO 0x52 +//#define EXT_SENS_DATA_10 0x53 +//#define EXT_SENS_DATA_11 0x54 +//#define EXT_SENS_DATA_12 0x55 +//#define EXT_SENS_DATA_13 0x56 +//#define EXT_SENS_DATA_14 0x57 +//#define EXT_SENS_DATA_15 0x58 +//#define EXT_SENS_DATA_16 0x59 +//#define EXT_SENS_DATA_17 0x5A +//#define EXT_SENS_DATA_18 0x5B +//#define EXT_SENS_DATA_19 0x5C +//#define EXT_SENS_DATA_20 0x5D +//#define EXT_SENS_DATA_21 0x5E +//#define EXT_SENS_DATA_22 0x5F +//#define EXT_SENS_DATA_23 0x60 +//#define MOT_DETECT_STATUS 0x61 +//#define I2C_SLV0_DO 0x63 +//#define I2C_SLV1_DO 0x64 +//#define I2C_SLV2_DO 0x65 +//#define I2C_SLV3_DO 0x66 +//#define I2C_MST_DELAY_CTRL 0x67 +#define ICM20602_SIGNAL_PATH_RESET 0x68 +#define ICM20602_ACCEL_INTEL_CTRL 0x69 +#define ICM20602_USER_CTRL 0x6A // Bit 7 enable DMP, bit 3 reset DMP +#define ICM20602_PWR_MGMT_1 0x6B // Device defaults to the SLEEP mode +#define ICM20602_PWR_MGMT_2 0x6C +//#define DMP_BANK 0x6D // Activates a specific bank in the DMP +//#define DMP_RW_PNT 0x6E // Set read/write pointer to a specific start address in specified DMP bank +//#define DMP_REG 0x6F // Register in DMP from which to read or to which to write +//#define DMP_REG_1 0x70 +//#define DMP_REG_2 0x71 +#define ICM20602_FIFO_COUNTH 0x72 +#define ICM20602_FIFO_COUNTL 0x73 +#define ICM20602_FIFO_R_W 0x74 +#define ICM20602_WHO_AM_I 0x75 // Should return 0x68 + +// Using the GY-521 breakout board, I set ADO to 0 by grounding through a 4k7 resistor +// Seven-bit device address is 110100 for ADO = 0 and 110101 for ADO = 1 +#define ADO 0 +#if ADO +#define ICM20602_slave_addr 0x69<<1 // Device address when ADO = 1 +#else +#define ICM20602_slave_addr 0x68<<1 // Device address when ADO = 0 +#endif + +#define IMU_ONE_G 9.80665 +//#define ICM20602_slave_addr 0xD0 +extern float aRes, gRes; +extern Serial pc; + +class ICM20602 { + public: + void whoAmI(); + void init(); + int16_t getAccXvalue(); + int16_t getAccYvalue(); + int16_t getAccZvalue(); + int16_t getGyrXvalue(); + int16_t getGyrYvalue(); + int16_t getGyrZvalue(); + int16_t getIMUTemp(); + float setAccRange(int Ascale); + float setGyroRange(int Gscale); +}; \ No newline at end of file
--- a/main.cpp Wed Oct 26 03:08:46 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/// using NuMaker-PFM-NUC472 I2C0 to read 3-axis accelerometer & 3-axis gyroscope (MPU6500) -#include "mbed.h" -#include "mpu6500.h" - -I2C i2c0(PC_9, PA_15); // I2C0_SDA, I2C0_SCL - -MPU6500 IMU; // on-board IMU is MPU6500 - -int main() { - int16_t accX, accY, accZ; - int16_t gyroX, gyroY, gyroZ; - - i2c0.frequency(400000); - IMU.initialize(); - - while(true) { - accX = IMU.getAccelXvalue(); - accY = IMU.getAccelYvalue(); - accZ = IMU.getAccelZvalue(); - gyroX= IMU.getGyroXvalue(); - gyroY= IMU.getGyroYvalue(); - gyroZ= IMU.getGyroZvalue(); - printf("Acc: %6d, %6d, %6d, ", accX, accY, accZ); - printf("Gyro:%6d, %6d, %6d\n\r", gyroX, gyroY, gyroZ); - } -}
--- a/mbed-os.lib Wed Oct 26 03:08:46 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://github.com/ARMmbed/mbed-os/#e435a07d9252f133ea3d9f6c95dfb176f32ab9b6
--- a/mpu6500.cpp Wed Oct 26 03:08:46 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -#include "mbed.h" -#include "mpu6500.h" - -I2C mpu6500_i2c(PC_9, PA_15); // I2C0_SDA, I2C0_SCL - -void MPU6500_WriteByte(uint8_t MPU6500_reg, uint8_t MPU6500_data) -{ - char data_out[2]; - data_out[0]=MPU6500_reg; - data_out[1]=MPU6500_data; - mpu6500_i2c.write(MPU6500_slave_addr, data_out, 2, 0); -} - -uint8_t MPU6500_ReadByte(uint8_t MPU6500_reg) -{ - char data_out[1], data_in[1]; - data_out[0] = MPU6500_reg; - mpu6500_i2c.write(MPU6500_slave_addr, data_out, 1, 1); - mpu6500_i2c.read(MPU6500_slave_addr, data_in, 1, 0); - return (data_in[0]); -} - -void MPU6500::initialize() -{ - MPU6500_WriteByte(MPU6500_PWR_MGMT_1, 0x00); // CLK_SEL=0: internal 8MHz, TEMP_DIS=0, SLEEP=0 - MPU6500_WriteByte(MPU6500_SMPLRT_DIV, 0x07); // Gyro output sample rate = Gyro Output Rate/(1+SMPLRT_DIV) - MPU6500_WriteByte(MPU6500_CONFIG, 0x06); // set TEMP_OUT_L, DLPF=2 (Fs=1KHz) - MPU6500_WriteByte(MPU6500_GYRO_CONFIG, 0x18); // bit[4:3] 0=+-250d/s,1=+-500d/s,2=+-1000d/s,3=+-2000d/s - MPU6500_WriteByte(MPU6500_ACCEL_CONFIG, 0x01);// bit[4:3] 0=+-2g,1=+-4g,2=+-8g,3=+-16g, ACC_HPF=On (5Hz) -} - -int16_t MPU6500::getAccelXvalue() -{ - uint8_t LoByte, HiByte; - LoByte = MPU6500_ReadByte(MPU6500_ACCEL_XOUT_L); // read Accelerometer X_Low value - HiByte = MPU6500_ReadByte(MPU6500_ACCEL_XOUT_H); // read Accelerometer X_High value - return((HiByte<<8) | LoByte); -} - -int16_t MPU6500::getAccelYvalue() -{ - uint8_t LoByte, HiByte; - LoByte = MPU6500_ReadByte(MPU6500_ACCEL_YOUT_L); // read Accelerometer X_Low value - HiByte = MPU6500_ReadByte(MPU6500_ACCEL_YOUT_H); // read Accelerometer X_High value - return ((HiByte<<8) | LoByte); -} - -int16_t MPU6500::getAccelZvalue() -{ - uint8_t LoByte, HiByte; - LoByte = MPU6500_ReadByte(MPU6500_ACCEL_ZOUT_L); // read Accelerometer X_Low value - HiByte = MPU6500_ReadByte(MPU6500_ACCEL_ZOUT_H); // read Accelerometer X_High value - return ((HiByte<<8) | LoByte); -} - -int16_t MPU6500::getGyroXvalue() -{ - uint8_t LoByte, HiByte; - LoByte = MPU6500_ReadByte(MPU6500_GYRO_XOUT_L); // read Accelerometer X_Low value - HiByte = MPU6500_ReadByte(MPU6500_GYRO_XOUT_H); // read Accelerometer X_High value - return ((HiByte<<8) | LoByte); -} - -int16_t MPU6500::getGyroYvalue() -{ - uint8_t LoByte, HiByte; - LoByte = MPU6500_ReadByte(MPU6500_GYRO_YOUT_L); // read Accelerometer X_Low value - HiByte = MPU6500_ReadByte(MPU6500_GYRO_YOUT_H); // read Accelerometer X_High value - return ((HiByte<<8) | LoByte); -} - -int16_t MPU6500::getGyroZvalue() -{ - uint8_t LoByte, HiByte; - LoByte = MPU6500_ReadByte(MPU6500_GYRO_ZOUT_L); // read Accelerometer X_Low value - HiByte = MPU6500_ReadByte(MPU6500_GYRO_ZOUT_H); // read Accelerometer X_High value - return ((HiByte<<8) | LoByte); -}
--- a/mpu6500.h Wed Oct 26 03:08:46 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,113 +0,0 @@ -#define MPU6500_SELF_TEST_X_GYRO 0x00 -#define MPU6500_SELF_TEST_Y_GYRO 0x01 -#define MPU6500_SELF_TEST_Z_GYRO 0x02 -#define MPU6500_SELF_TEST_X_ACCEL 0x0D -#define MPU6500_SELF_TEST_Y_ACCEL 0x0E -#define MPU6500_SELF_TEST_Z_ACCEL 0x0F -#define MPU6500_XG_OFFSET_H 0x13 -#define MPU6500_XG_OFFSET_L 0x14 -#define MPU6500_YG_OFFSET_H 0x15 -#define MPU6500_YG_OFFSET_L 0x16 -#define MPU6500_ZG_OFFSET_H 0x17 -#define MPU6500_ZG_OFFSET_L 0x18 -#define MPU6500_SMPLRT_DIV 0x19 -#define MPU6500_CONFIG 0x1A -#define MPU6500_GYRO_CONFIG 0x1B -#define MPU6500_ACCEL_CONFIG 0x1C -#define MPU6500_ACCEL_CONFIG2 0x1D -#define MPU6500_LP_ACCEL_ODR 0x1E -#define MPU6500_WOM_THR 0x1F -#define MPU6500_FIFO_EN 0x23 -#define MPU6500_I2C_MST_CTRL 0x24 -#define MPU6500_I2C_SLV0_ADDR 0x25 -#define MPU6500_I2C_SLV0_REG 0x26 -#define MPU6500_I2C_SLV0_CTRL 0x27 -#define MPU6500_I2C_SLV1_ADDR 0x28 -#define MPU6500_I2C_SLV1_REG 0x29 -#define MPU6500_I2C_SLV1_CTRL 0x2A -#define MPU6500_I2C_SLV2_ADDR 0x2B -#define MPU6500_I2C_SLV2_REG 0x2C -#define MPU6500_I2C_SLV2_CTRL 0x2D -#define MPU6500_I2C_SLV3_ADDR 0x2E -#define MPU6500_I2C_SLV3_REG 0x2F -#define MPU6500_I2C_SLV3_CTRL 0x30 -#define MPU6500_I2C_SLV4_ADDR 0x31 -#define MPU6500_I2C_SLV4_REG 0x32 -#define MPU6500_I2C_SLV4_DO 0x33 -#define MPU6500_I2C_SLV4_CTRL 0x34 -#define MPU6500_I2C_SLV4_DI 0x35 -#define MPU6500_I2C_MST_STATUS 0x36 -#define MPU6500_INT_PIN_CFG 0x37 -#define MPU6500_INT_ENABLE 0x38 -#define MPU6500_INT_STATUS 0x3A -#define MPU6500_ACCEL_XOUT_H 0x3B -#define MPU6500_ACCEL_XOUT_L 0x3C -#define MPU6500_ACCEL_YOUT_H 0x3D -#define MPU6500_ACCEL_YOUT_L 0x3E -#define MPU6500_ACCEL_ZOUT_H 0x3F -#define MPU6500_ACCEL_ZOUT_L 0x40 -#define MPU6500_TEMP_OUT_H 0x41 -#define MPU6500_TEMP_OUT_L 0x42 -#define MPU6500_GYRO_XOUT_H 0x43 -#define MPU6500_GYRO_XOUT_L 0x44 -#define MPU6500_GYRO_YOUT_H 0x45 -#define MPU6500_GYRO_YOUT_L 0x46 -#define MPU6500_GYRO_ZOUT_H 0x47 -#define MPU6500_GYRO_ZOUT_L 0x48 -#define MPU6500_EXT_SENS_DATA_00 0x49 -#define MPU6500_EXT_SENS_DATA_01 0x4A -#define MPU6500_EXT_SENS_DATA_02 0x4B -#define MPU6500_EXT_SENS_DATA_03 0x4C -#define MPU6500_EXT_SENS_DATA_04 0x4D -#define MPU6500_EXT_SENS_DATA_05 0x4E -#define MPU6500_EXT_SENS_DATA_06 0x4F -#define MPU6500_EXT_SENS_DATA_07 0x50 -#define MPU6500_EXT_SENS_DATA_08 0x51 -#define MPU6500_EXT_SENS_DATA_09 0x52 -#define MPU6500_EXT_SENS_DATA_10 0x53 -#define MPU6500_EXT_SENS_DATA_11 0x54 -#define MPU6500_EXT_SENS_DATA_12 0x55 -#define MPU6500_EXT_SENS_DATA_13 0x56 -#define MPU6500_EXT_SENS_DATA_14 0x57 -#define MPU6500_EXT_SENS_DATA_15 0x58 -#define MPU6500_EXT_SENS_DATA_16 0x59 -#define MPU6500_EXT_SENS_DATA_17 0x5A -#define MPU6500_EXT_SENS_DATA_18 0x5B -#define MPU6500_EXT_SENS_DATA_19 0x5C -#define MPU6500_EXT_SENS_DATA_20 0x5D -#define MPU6500_EXT_SENS_DATA_21 0x5E -#define MPU6500_EXT_SENS_DATA_22 0x5F -#define MPU6500_EXT_SENS_DATA_23 0x60 -#define MPU6500_I2C_SLV0_DO 0x63 -#define MPU6500_I2C_SLV1_DO 0x64 -#define MPU6500_I2C_SLV2_DO 0x65 -#define MPU6500_I2C_SLV3_DO 0x66 -#define MPU6500_I2C_MST_DELAY_CTRL 0x67 -#define MPU6500_SIGNAL_PATH_RESET 0x68 -#define MPU6500_ACCEL_INTEL_CTRL 0x69 -#define MPU6500_USER_CTRL 0x6A -#define MPU6500_PWR_MGMT_1 0x6B -#define MPU6500_PWR_MGMT_2 0x6C -#define MPU6500_FIFO_COUNT_H 0x72 -#define MPU6500_FIFO_COUNT_L 0x73 -#define MPU6500_FIFO_R_W 0x74 -#define MPU6500_WHO_AM_I 0x75 -#define MPU6500_XA_OFFSET_H 0x77 -#define MPU6500_XA_OFFSET_L 0x78 -#define MPU6500_YA_OFFSET_H 0x79 -#define MPU6500_YA_OFFSET_L 0x7A -#define MPU6500_ZA_OFFSET_H 0x7D -#define MPU6500_ZA_OFFSET_L 0x7E - -#define MPU6500_slave_addr 0xD0 - -class MPU6500 { - public: - void initialize(); - int16_t getAccelXvalue(); - int16_t getAccelYvalue(); - int16_t getAccelZvalue(); - int16_t getGyroXvalue(); - int16_t getGyroYvalue(); - int16_t getGyroZvalue(); -}; \ No newline at end of file