Successful acro and level mode now! Relying on MPU9250 as base sensor. I'm working continuously on tuning and features :) NEWEST VERSION ON: https://github.com/MaEtUgR/FlyBed (CODE 100% compatible/copyable)
MPU9250.h
00001 // by MaEtUgR (Matthias Grob) 2015 00002 00003 #ifndef MPU9250_H 00004 #define MPU9250_H 00005 00006 #include "mbed.h" 00007 00008 class MPU9250 { 00009 public: 00010 MPU9250(PinName MOSI, PinName MISO, PinName SCLK, PinName CS); // constructor, uses SPI class 00011 00012 // Device API 00013 uint8_t getWhoami(); // get the Who am I Register (should be 0x71 = 113) 00014 float getTemperature(); // get a temperature measurement in °C 00015 00016 void readGyro(); // read measurement data from gyrsocope 00017 float Gyro[3]; // where gyrsocope measurement data is stored 00018 void readAcc(); // read measurement data from accelerometer 00019 float Acc[3]; // where accelerometer measurement data is stored 00020 00021 //private: 00022 00023 // SPI Inteface 00024 SPI spi; // SPI Bus 00025 DigitalOut cs; // Slave selector for SPI-Bus (needed to start and end SPI transactions) 00026 00027 uint8_t readRegister8(uint8_t reg); // expressive methods to read or write the number of bits written in the name 00028 uint16_t readRegister16(uint8_t reg); 00029 void readRegister48(uint8_t reg, int16_t *buffer); 00030 void writeRegister8(uint8_t reg, uint8_t buffer); 00031 00032 void readRegister(uint8_t reg, uint8_t *buffer, int length); // reads length bytes of the slave registers into buffer memory 00033 void writeRegister(uint8_t reg, uint8_t *buffer, int length); // writes length bytes to the slave registers from buffer memory 00034 void select(); // selects the slave for a transaction 00035 void deselect(); // deselects the slave after transaction 00036 }; 00037 00038 // --------------------- Register Addresses ---------------------------------------------- 00039 // Mnemonic Address Description 00040 #define MPU9250_SELF_TEST_X_GYRO 0x00 // Gyroscope Self-Test Registers 00041 #define MPU9250_SELF_TEST_Y_GYRO 0x01 // 00042 #define MPU9250_SELF_TEST_Z_GYRO 0x02 // 00043 #define MPU9250_SELF_TEST_X_ACCEL 0x0D // Accelerometer Self-Test Registers 00044 #define MPU9250_SELF_TEST_Y_ACCEL 0x0E // 00045 #define MPU9250_SELF_TEST_Z_ACCEL 0x0F // 00046 #define MPU9250_XG_OFFSET_H 0x13 // Gyro Offset Registers 00047 #define MPU9250_XG_OFFSET_L 0x14 // 00048 #define MPU9250_YG_OFFSET_H 0x15 // 00049 #define MPU9250_YG_OFFSET_L 0x16 // 00050 #define MPU9250_ZG_OFFSET_H 0x17 // 00051 #define MPU9250_ZG_OFFSET_L 0x18 // 00052 #define MPU9250_SMPLRT_DIV 0x19 // Sample Rate Divider 00053 #define MPU9250_CONFIG 0x1A // Configuration 00054 #define MPU9250_GYRO_CONFIG 0x1B // Gyroscope Configuration 00055 #define MPU9250_ACCEL_CONFIG 0x1C // Accelerometer Configuration 00056 #define MPU9250_ACCEL_CONFIG_2 0x1D // Accelerometer Configuration 2 00057 #define MPU9250_LP_ACCEL_ODR 0x1E // Low Power Accelerometer ODR Control 00058 #define MPU9250_WOM_THR 0x1F // Wake-on Motion Threshold 00059 #define MPU9250_FIFO_EN 0x23 // FIFO Enable 00060 00061 #define MPU9250_I2C_MST_CTRL 0x24 // I2C Master Control 00062 #define MPU9250_I2C_SLV0_ADDR 0x25 // I2C Slave 0 Control 00063 #define MPU9250_I2C_SLV0_REG 0x26 // 00064 #define MPU9250_I2C_SLV0_CTRL 0x27 // 00065 #define MPU9250_I2C_SLV1_ADDR 0x28 // I2C Slave 1 Control 00066 #define MPU9250_I2C_SLV1_REG 0x29 // 00067 #define MPU9250_I2C_SLV1_CTRL 0x2A // 00068 #define MPU9250_I2C_SLV2_ADDR 0x2B // I2C Slave 2 Control 00069 #define MPU9250_I2C_SLV2_REG 0x2C // 00070 #define MPU9250_I2C_SLV2_CTRL 0x2D // 00071 #define MPU9250_I2C_SLV3_ADDR 0x2E // I2C Slave 3 Control 00072 #define MPU9250_I2C_SLV3_REG 0x2F // 00073 #define MPU9250_I2C_SLV3_CTRL 0x30 // 00074 #define MPU9250_I2C_SLV4_ADDR 0x31 // I2C Slave 4 Control 00075 #define MPU9250_I2C_SLV4_REG 0x32 // 00076 #define MPU9250_I2C_SLV4_DO 0x33 // 00077 #define MPU9250_I2C_SLV4_CTRL 0x34 // 00078 #define MPU9250_I2C_SLV4_DI 0x35 // 00079 #define MPU9250_I2C_MST_STATUS 0x36 // I2C Master Status 00080 00081 #define MPU9250_INT_PIN_CFG 0x37 // INT Pin / Bypass Enable Configuration 00082 #define MPU9250_INT_ENABLE 0x38 // Interrupt Enable 00083 #define MPU9250_INT_STATUS 0x3A // Interrupt Status 00084 00085 #define MPU9250_ACCEL_XOUT_H 0x3B // Accelerometer Measurements 00086 #define MPU9250_ACCEL_XOUT_L 0x3C // 00087 #define MPU9250_ACCEL_YOUT_H 0x3D // 00088 #define MPU9250_ACCEL_YOUT_L 0x3E // 00089 #define MPU9250_ACCEL_ZOUT_H 0x3F // 00090 #define MPU9250_ACCEL_ZOUT_L 0x40 // 00091 #define MPU9250_TEMP_OUT_H 0x41 // Temperature Measurement 00092 #define MPU9250_TEMP_OUT_L 0x42 // 00093 #define MPU9250_GYRO_XOUT_H 0x43 // Gyroscope Measurements 00094 #define MPU9250_GYRO_XOUT_L 0x44 // 00095 #define MPU9250_GYRO_YOUT_H 0x45 // 00096 #define MPU9250_GYRO_YOUT_L 0x46 // 00097 #define MPU9250_GYRO_ZOUT_H 0x47 // 00098 #define MPU9250_GYRO_ZOUT_L 0x48 // 00099 00100 #define MPU9250_EXT_SENS_DATA_00 0x49 // External Sensor Data 00101 #define MPU9250_EXT_SENS_DATA_01 0x4A // 00102 #define MPU9250_EXT_SENS_DATA_02 0x4B // 00103 #define MPU9250_EXT_SENS_DATA_03 0x4C // 00104 #define MPU9250_EXT_SENS_DATA_04 0x4D // 00105 #define MPU9250_EXT_SENS_DATA_05 0x4E // 00106 #define MPU9250_EXT_SENS_DATA_06 0x4F // 00107 #define MPU9250_EXT_SENS_DATA_07 0x50 // 00108 #define MPU9250_EXT_SENS_DATA_08 0x51 // 00109 #define MPU9250_EXT_SENS_DATA_09 0x52 // 00110 #define MPU9250_EXT_SENS_DATA_10 0x53 // 00111 #define MPU9250_EXT_SENS_DATA_11 0x54 // 00112 #define MPU9250_EXT_SENS_DATA_12 0x55 // 00113 #define MPU9250_EXT_SENS_DATA_13 0x56 // 00114 #define MPU9250_EXT_SENS_DATA_14 0x57 // 00115 #define MPU9250_EXT_SENS_DATA_15 0x58 // 00116 #define MPU9250_EXT_SENS_DATA_16 0x59 // 00117 #define MPU9250_EXT_SENS_DATA_17 0x5A // 00118 #define MPU9250_EXT_SENS_DATA_18 0x5B // 00119 #define MPU9250_EXT_SENS_DATA_19 0x5C // 00120 #define MPU9250_EXT_SENS_DATA_20 0x5D // 00121 #define MPU9250_EXT_SENS_DATA_21 0x5E // 00122 #define MPU9250_EXT_SENS_DATA_22 0x5F // 00123 #define MPU9250_EXT_SENS_DATA_23 0x60 // 00124 00125 #define MPU9250_I2C_SLV0_DO 0x63 // I2C Slave 0 Data Out 00126 #define MPU9250_I2C_SLV1_DO 0x64 // I2C Slave 1 Data Out 00127 #define MPU9250_I2C_SLV2_DO 0x65 // I2C Slave 2 Data Out 00128 #define MPU9250_I2C_SLV3_DO 0x66 // I2C Slave 3 Data Out 00129 #define MPU9250_I2C_MST_DELAY_CTRL 0x67 // I2C Master Delay Control 00130 #define MPU9250_SIGNAL_PATH_RESET 0x68 // Signal Path Reset 00131 #define MPU9250_MOT_DETECT_CTRL 0x69 // Accelerometer Interrupt Control 00132 #define MPU9250_USER_CTRL 0x6A // User Control 00133 #define MPU9250_PWR_MGMT_1 0x6B // Power Management 1 00134 #define MPU9250_PWR_MGMT_2 0x6C // Power Management 2 00135 #define MPU9250_FIFO_COUNTH 0x72 // FIFO Count Registers 00136 #define MPU9250_FIFO_COUNTL 0x73 // 00137 #define MPU9250_FIFO_R_W 0x74 // FIFO Read Write 00138 #define MPU9250_WHO_AM_I 0x75 // Who Am I 00139 #define MPU9250_XA_OFFSET_H 0x77 // Accelerometer Offset Registers 00140 #define MPU9250_XA_OFFSET_L 0x78 // 00141 #define MPU9250_YA_OFFSET_H 0x7A // 00142 #define MPU9250_YA_OFFSET_L 0x7B // 00143 #define MPU9250_ZA_OFFSET_H 0x7D // 00144 #define MPU9250_ZA_OFFSET_L 0x7E // 00145 00146 #endif
Generated on Tue Jul 12 2022 20:19:36 by 1.7.2