Small, versatile 9-axis sensor module by Bosch Sensortec 3D Accelerometer + 3D Gyroscope + 3D Magnetometer
Dependents: Pruebas_Flex_IMU_copy BMX055_Madgwick
BMX055.h@2:1bea0ef16d84, 2019-03-04 (annotated)
- Committer:
- kenjiArai
- Date:
- Mon Mar 04 04:10:59 2019 +0000
- Revision:
- 2:1bea0ef16d84
- Parent:
- 0:4196bd8bb88f
magnetic part -> Bug fix
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:4196bd8bb88f | 1 | /* |
kenjiArai | 0:4196bd8bb88f | 2 | * mbed library program |
kenjiArai | 0:4196bd8bb88f | 3 | * BMX055 Small, versatile 9-axis sensor module |
kenjiArai | 0:4196bd8bb88f | 4 | * by Bosch Sensortec |
kenjiArai | 0:4196bd8bb88f | 5 | * |
kenjiArai | 2:1bea0ef16d84 | 6 | * Copyright (c) 2018,'19 Kenji Arai / JH1PJL |
kenjiArai | 0:4196bd8bb88f | 7 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 0:4196bd8bb88f | 8 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 0:4196bd8bb88f | 9 | * Started: October 24th, 2018 |
kenjiArai | 2:1bea0ef16d84 | 10 | * Revised: March 3rd, 2019 |
kenjiArai | 0:4196bd8bb88f | 11 | */ |
kenjiArai | 0:4196bd8bb88f | 12 | /* |
kenjiArai | 0:4196bd8bb88f | 13 | *---------------- REFERENCE --------------------------------------------------- |
kenjiArai | 0:4196bd8bb88f | 14 | * Original Information |
kenjiArai | 0:4196bd8bb88f | 15 | * https://www.bosch-sensortec.com/bst/products/all_products/bmx055 |
kenjiArai | 0:4196bd8bb88f | 16 | * Data Sheet BST-BMX055-DS000-02 Rev.1.1 November 7th, 2014 |
kenjiArai | 0:4196bd8bb88f | 17 | * Sample software |
kenjiArai | 0:4196bd8bb88f | 18 | * BMX055 - Combination of bma2x2 + bmg160 + bmm050 APIs |
kenjiArai | 0:4196bd8bb88f | 19 | * https://github.com/BoschSensortec/BMA2x2_driver |
kenjiArai | 0:4196bd8bb88f | 20 | * https://github.com/BoschSensortec/BMG160_driver |
kenjiArai | 0:4196bd8bb88f | 21 | * https://github.com/BoschSensortec/BMM050_driver |
kenjiArai | 0:4196bd8bb88f | 22 | * Aplied Board |
kenjiArai | 0:4196bd8bb88f | 23 | * AE-BMX055 Module |
kenjiArai | 0:4196bd8bb88f | 24 | * http://akizukidenshi.com/catalog/g/gK-13010/ |
kenjiArai | 0:4196bd8bb88f | 25 | */ |
kenjiArai | 0:4196bd8bb88f | 26 | |
kenjiArai | 0:4196bd8bb88f | 27 | // NO Interrupt functions are supported due to no pin on AE-BMX055 Module |
kenjiArai | 0:4196bd8bb88f | 28 | // Only supprt normal mode (No sleep and/or standby mode) |
kenjiArai | 0:4196bd8bb88f | 29 | |
kenjiArai | 0:4196bd8bb88f | 30 | #ifndef BMX055_H |
kenjiArai | 0:4196bd8bb88f | 31 | #define BMX055_H |
kenjiArai | 0:4196bd8bb88f | 32 | |
kenjiArai | 0:4196bd8bb88f | 33 | #include "mbed.h" |
kenjiArai | 0:4196bd8bb88f | 34 | |
kenjiArai | 0:4196bd8bb88f | 35 | #define AKIZUKI_BOARD |
kenjiArai | 0:4196bd8bb88f | 36 | |
kenjiArai | 0:4196bd8bb88f | 37 | // BMX055 |
kenjiArai | 0:4196bd8bb88f | 38 | // Automatic detection for the address!! |
kenjiArai | 0:4196bd8bb88f | 39 | // AE-BMX055 board default setting (All jumpers are open) |
kenjiArai | 0:4196bd8bb88f | 40 | #define BMX055_GYR_CHIP_ADDR (0x69 << 1) |
kenjiArai | 0:4196bd8bb88f | 41 | #define BMX055_ACC_CHIP_ADDR (0x19 << 1) |
kenjiArai | 0:4196bd8bb88f | 42 | #define BMX055_MAG_CHIP_ADDR (0x13 << 1) |
kenjiArai | 0:4196bd8bb88f | 43 | |
kenjiArai | 0:4196bd8bb88f | 44 | // ID's |
kenjiArai | 0:4196bd8bb88f | 45 | #define I_AM_BMX055_ACC 0xfa // ACC ID |
kenjiArai | 0:4196bd8bb88f | 46 | #define I_AM_BMX055_GYR 0x0f // GYR ID |
kenjiArai | 0:4196bd8bb88f | 47 | #define I_AM_BMX055_MAG 0x32 // MAG ID |
kenjiArai | 0:4196bd8bb88f | 48 | |
kenjiArai | 0:4196bd8bb88f | 49 | ////////////// PARAMETER DEFINITION /////////////////////// |
kenjiArai | 0:4196bd8bb88f | 50 | // ACC full scale |
kenjiArai | 0:4196bd8bb88f | 51 | #define ACC_2G 3 |
kenjiArai | 0:4196bd8bb88f | 52 | #define ACC_4G 5 |
kenjiArai | 0:4196bd8bb88f | 53 | #define ACC_8G 8 |
kenjiArai | 0:4196bd8bb88f | 54 | #define ACC_16G 12 |
kenjiArai | 0:4196bd8bb88f | 55 | |
kenjiArai | 0:4196bd8bb88f | 56 | // Support only "filtered mode" |
kenjiArai | 0:4196bd8bb88f | 57 | // ACC Bandwidth (BW = ODR/2 (ODR = Output Data Rate)) |
kenjiArai | 0:4196bd8bb88f | 58 | #define ACC_BW7R81Hz 8 // 64 ms |
kenjiArai | 0:4196bd8bb88f | 59 | #define ACC_BW15R63Hz 9 // 32 ms |
kenjiArai | 0:4196bd8bb88f | 60 | #define ACC_BW31R25Hz 10 // 16 ms |
kenjiArai | 0:4196bd8bb88f | 61 | #define ACC_BW62R5Hz 11 // 8 ms |
kenjiArai | 0:4196bd8bb88f | 62 | #define ACC_BW125Hz 12 // 4 ms |
kenjiArai | 0:4196bd8bb88f | 63 | #define ACC_BW250Hz 13 // 2 ms |
kenjiArai | 0:4196bd8bb88f | 64 | #define ACC_BW500Hz 14 // 1 ms |
kenjiArai | 0:4196bd8bb88f | 65 | #define ACC_BW1kHz 15 // 0.5 ms |
kenjiArai | 0:4196bd8bb88f | 66 | |
kenjiArai | 0:4196bd8bb88f | 67 | // Gyro Sampling (Data per Second) |
kenjiArai | 0:4196bd8bb88f | 68 | #define GYR_2000DPS 0 // full scal +/- 2000 Deg/s(61.0 mDeg/sec/LSB) |
kenjiArai | 0:4196bd8bb88f | 69 | #define GYR_1000DPS 1 // +/- 1000 Deg/s(30.5 mDeg/sec/LSB) |
kenjiArai | 0:4196bd8bb88f | 70 | #define GYR_500DPS 2 // +/- 500 Deg/s(15.3 mDeg/sec/LSB) |
kenjiArai | 0:4196bd8bb88f | 71 | #define GYR_250DPS 3 // +/- 250 Deg/s(7.6 mDeg/sec/LSB) |
kenjiArai | 0:4196bd8bb88f | 72 | #define GYR_125DPS 4 // +/- 125 Deg/s(3.8 mDeg/sec/LSB) |
kenjiArai | 0:4196bd8bb88f | 73 | |
kenjiArai | 0:4196bd8bb88f | 74 | // Gyro Bandwidth |
kenjiArai | 0:4196bd8bb88f | 75 | #define GYR_2000Hz523Hz 0 // 2000 Hz ODR and unfiltered (BW(bandwidth) 523Hz) |
kenjiArai | 0:4196bd8bb88f | 76 | #define GYR_2000Hz230Hz 1 // 2000 Hz ODR 230 Hz BW |
kenjiArai | 0:4196bd8bb88f | 77 | #define GYR_1000Hz116Hz 2 // 1000 Hz ODR 116 Hz BW |
kenjiArai | 0:4196bd8bb88f | 78 | #define GYR_400Hz47Hz 3 // 400 Hz ODR 47 Hz BW |
kenjiArai | 0:4196bd8bb88f | 79 | #define GYR_200Hz23Hz 4 // 200 Hz ODR 23 Hz BW |
kenjiArai | 0:4196bd8bb88f | 80 | #define GYR_100Hz12Hz 5 // 100 Hz ODR 12 Hz BW |
kenjiArai | 0:4196bd8bb88f | 81 | #define GYR_200Hz64Hz 6 // 200 Hz ODR 64 Hz BW |
kenjiArai | 0:4196bd8bb88f | 82 | #define GYR_100Hz32Hz 7 // 100 Hz ODR 32 Hz BW |
kenjiArai | 0:4196bd8bb88f | 83 | |
kenjiArai | 0:4196bd8bb88f | 84 | // MAG |
kenjiArai | 0:4196bd8bb88f | 85 | #define MAG_ODR10Hz 0 // 10 Hz ODR(default) |
kenjiArai | 0:4196bd8bb88f | 86 | #define MAG_ODR2Hz 1 // 2 Hz ODR |
kenjiArai | 0:4196bd8bb88f | 87 | #define MAG_ODR6Hz 2 // 6 Hz ODR |
kenjiArai | 0:4196bd8bb88f | 88 | #define MAG_ODR8Hz 3 // 8 Hz ODR |
kenjiArai | 0:4196bd8bb88f | 89 | #define MAG_ODR15Hz 4 // 15 Hz ODR |
kenjiArai | 0:4196bd8bb88f | 90 | #define MAG_ODR20Hz 5 // 20 Hz ODR |
kenjiArai | 0:4196bd8bb88f | 91 | #define MAG_ODR25Hz 6 // 25 Hz ODR |
kenjiArai | 0:4196bd8bb88f | 92 | #define MAG_ODR30Hz 7 // 30 Hz ODR |
kenjiArai | 0:4196bd8bb88f | 93 | |
kenjiArai | 0:4196bd8bb88f | 94 | ////////////// DATA TYPE DEFINITION /////////////////////// |
kenjiArai | 0:4196bd8bb88f | 95 | typedef struct { |
kenjiArai | 0:4196bd8bb88f | 96 | // ACC |
kenjiArai | 0:4196bd8bb88f | 97 | uint8_t acc_fs; // Accelerometer full scale range |
kenjiArai | 0:4196bd8bb88f | 98 | uint8_t acc_bw; // Accelerometer filtered bandwidth |
kenjiArai | 0:4196bd8bb88f | 99 | // GYR |
kenjiArai | 0:4196bd8bb88f | 100 | uint8_t gyr_fs; // Gyroscope full scale range |
kenjiArai | 0:4196bd8bb88f | 101 | uint8_t gyr_bw; // Gyroscope filtered bandwidth |
kenjiArai | 0:4196bd8bb88f | 102 | // MAG |
kenjiArai | 0:4196bd8bb88f | 103 | uint8_t mag_odr; // Magnetometer Output Data Rate |
kenjiArai | 0:4196bd8bb88f | 104 | } BMX055_TypeDef; |
kenjiArai | 0:4196bd8bb88f | 105 | |
kenjiArai | 0:4196bd8bb88f | 106 | ////////////// DEFAULT SETTING //////////////////////////// |
kenjiArai | 0:4196bd8bb88f | 107 | // Standard parameter for easy set-up |
kenjiArai | 0:4196bd8bb88f | 108 | const BMX055_TypeDef bmx055_std_paramtr = { |
kenjiArai | 0:4196bd8bb88f | 109 | // ACC |
kenjiArai | 0:4196bd8bb88f | 110 | ACC_2G, |
kenjiArai | 0:4196bd8bb88f | 111 | ACC_BW250Hz, |
kenjiArai | 0:4196bd8bb88f | 112 | // GYR |
kenjiArai | 0:4196bd8bb88f | 113 | GYR_125DPS, |
kenjiArai | 0:4196bd8bb88f | 114 | GYR_100Hz32Hz, |
kenjiArai | 0:4196bd8bb88f | 115 | // MAG |
kenjiArai | 0:4196bd8bb88f | 116 | MAG_ODR10Hz |
kenjiArai | 0:4196bd8bb88f | 117 | }; |
kenjiArai | 0:4196bd8bb88f | 118 | |
kenjiArai | 0:4196bd8bb88f | 119 | ////////////// DATA TYPE DEFINITION /////////////////////// |
kenjiArai | 0:4196bd8bb88f | 120 | typedef struct { |
kenjiArai | 0:4196bd8bb88f | 121 | uint8_t acc_addr; |
kenjiArai | 0:4196bd8bb88f | 122 | uint8_t mag_addr; |
kenjiArai | 0:4196bd8bb88f | 123 | uint8_t gyr_addr; |
kenjiArai | 0:4196bd8bb88f | 124 | } BMX055_ADDR_INF_TypeDef; |
kenjiArai | 0:4196bd8bb88f | 125 | |
kenjiArai | 0:4196bd8bb88f | 126 | typedef struct { |
kenjiArai | 0:4196bd8bb88f | 127 | uint8_t acc_id; |
kenjiArai | 0:4196bd8bb88f | 128 | uint8_t mag_id; |
kenjiArai | 0:4196bd8bb88f | 129 | uint8_t gyr_id; |
kenjiArai | 0:4196bd8bb88f | 130 | } BMX055_ID_INF_TypeDef; |
kenjiArai | 0:4196bd8bb88f | 131 | |
kenjiArai | 0:4196bd8bb88f | 132 | typedef struct { |
kenjiArai | 0:4196bd8bb88f | 133 | float x; |
kenjiArai | 0:4196bd8bb88f | 134 | float y; |
kenjiArai | 0:4196bd8bb88f | 135 | float z; |
kenjiArai | 0:4196bd8bb88f | 136 | } BMX055_ACCEL_TypeDef; |
kenjiArai | 0:4196bd8bb88f | 137 | |
kenjiArai | 0:4196bd8bb88f | 138 | typedef struct { |
kenjiArai | 0:4196bd8bb88f | 139 | float x; |
kenjiArai | 0:4196bd8bb88f | 140 | float y; |
kenjiArai | 0:4196bd8bb88f | 141 | float z; |
kenjiArai | 0:4196bd8bb88f | 142 | } BMX055_GRAVITY_TypeDef; |
kenjiArai | 0:4196bd8bb88f | 143 | |
kenjiArai | 0:4196bd8bb88f | 144 | typedef struct { |
kenjiArai | 0:4196bd8bb88f | 145 | float x; |
kenjiArai | 0:4196bd8bb88f | 146 | float y; |
kenjiArai | 0:4196bd8bb88f | 147 | float z; |
kenjiArai | 0:4196bd8bb88f | 148 | } BMX055_GYRO_TypeDef; |
kenjiArai | 0:4196bd8bb88f | 149 | |
kenjiArai | 0:4196bd8bb88f | 150 | typedef struct { |
kenjiArai | 0:4196bd8bb88f | 151 | float x; |
kenjiArai | 0:4196bd8bb88f | 152 | float y; |
kenjiArai | 0:4196bd8bb88f | 153 | float z; |
kenjiArai | 0:4196bd8bb88f | 154 | } BMX055_MAGNET_TypeDef; |
kenjiArai | 0:4196bd8bb88f | 155 | |
kenjiArai | 0:4196bd8bb88f | 156 | /** BMX055 Small, versatile 9-axis sensor module by Bosch Sensortec |
kenjiArai | 0:4196bd8bb88f | 157 | * @code |
kenjiArai | 0:4196bd8bb88f | 158 | * #include "mbed.h" |
kenjiArai | 0:4196bd8bb88f | 159 | * #include "BMX055.h" |
kenjiArai | 0:4196bd8bb88f | 160 | * |
kenjiArai | 0:4196bd8bb88f | 161 | * Serial pc(USBTX,USBRX); |
kenjiArai | 0:4196bd8bb88f | 162 | * I2C (I2C_SDA, I2C_SCL); |
kenjiArai | 0:4196bd8bb88f | 163 | * BMX055 imu(i2c); |
kenjiArai | 0:4196bd8bb88f | 164 | * |
kenjiArai | 0:4196bd8bb88f | 165 | * const BMX055_TypeDef bmx055_my_parameters = { |
kenjiArai | 0:4196bd8bb88f | 166 | * // ACC |
kenjiArai | 0:4196bd8bb88f | 167 | * ACC_2G, |
kenjiArai | 0:4196bd8bb88f | 168 | * ACC_BW250Hz, |
kenjiArai | 0:4196bd8bb88f | 169 | * // GYR |
kenjiArai | 0:4196bd8bb88f | 170 | * GYR_125DPS, |
kenjiArai | 0:4196bd8bb88f | 171 | * GYR_200Hz23Hz, |
kenjiArai | 0:4196bd8bb88f | 172 | * // MAG |
kenjiArai | 0:4196bd8bb88f | 173 | * MAG_ODR10Hz |
kenjiArai | 0:4196bd8bb88f | 174 | * }; |
kenjiArai | 0:4196bd8bb88f | 175 | * |
kenjiArai | 0:4196bd8bb88f | 176 | * int main() { |
kenjiArai | 0:4196bd8bb88f | 177 | * BMX055_ACCEL_TypeDef acc; |
kenjiArai | 0:4196bd8bb88f | 178 | * BMX055_GYRO_TypeDef gyr; |
kenjiArai | 0:4196bd8bb88f | 179 | * BMX055_MAGNET_TypeDef mag; |
kenjiArai | 0:4196bd8bb88f | 180 | * |
kenjiArai | 0:4196bd8bb88f | 181 | * if (imu.imu.chip_ready() == 0){ |
kenjiArai | 0:4196bd8bb88f | 182 | * pc.printf("Bosch BMX055 is NOT avirable!!\r\n"); |
kenjiArai | 0:4196bd8bb88f | 183 | * } |
kenjiArai | 0:4196bd8bb88f | 184 | * imu.set_parameter(&bmx055_my_parameters); |
kenjiArai | 0:4196bd8bb88f | 185 | * while(1) { |
kenjiArai | 0:4196bd8bb88f | 186 | * imu.get_accel(&acc); |
kenjiArai | 0:4196bd8bb88f | 187 | * pc.printf("//ACC: x=%+3.2f y=%+3.2f z=%+3.2f //", |
kenjiArai | 0:4196bd8bb88f | 188 | * acc.x, acc.y, acc.z); |
kenjiArai | 0:4196bd8bb88f | 189 | * imu.get_gyro(&gyr); |
kenjiArai | 0:4196bd8bb88f | 190 | * pc.printf("GYR: x=%+3.2f y=%+3.2f z=%+3.2f //", |
kenjiArai | 0:4196bd8bb88f | 191 | * gyr.x, gyr.y, gyr.z); |
kenjiArai | 0:4196bd8bb88f | 192 | * imu.get_magnet(&mag); |
kenjiArai | 0:4196bd8bb88f | 193 | * pc.printf("MAG: x=%+3.2f y=%+3.2f z=%+3.2f , passed %u sec\r\n", |
kenjiArai | 0:4196bd8bb88f | 194 | * mag.x, mag.y, mag.z, n++); |
kenjiArai | 0:4196bd8bb88f | 195 | * wait(0.5f); |
kenjiArai | 0:4196bd8bb88f | 196 | * } |
kenjiArai | 0:4196bd8bb88f | 197 | * } |
kenjiArai | 0:4196bd8bb88f | 198 | * @endcode |
kenjiArai | 0:4196bd8bb88f | 199 | */ |
kenjiArai | 0:4196bd8bb88f | 200 | |
kenjiArai | 0:4196bd8bb88f | 201 | class BMX055 |
kenjiArai | 0:4196bd8bb88f | 202 | { |
kenjiArai | 0:4196bd8bb88f | 203 | public: |
kenjiArai | 0:4196bd8bb88f | 204 | /** Configure data pin |
kenjiArai | 0:4196bd8bb88f | 205 | * @param data SDA and SCL pins |
kenjiArai | 0:4196bd8bb88f | 206 | * @param Other parameters are set automatically |
kenjiArai | 0:4196bd8bb88f | 207 | */ |
kenjiArai | 0:4196bd8bb88f | 208 | BMX055(PinName p_sda, PinName p_scl); |
kenjiArai | 0:4196bd8bb88f | 209 | |
kenjiArai | 0:4196bd8bb88f | 210 | /** Configure data pin (with other devices on I2C line) |
kenjiArai | 0:4196bd8bb88f | 211 | * @param I2C previous definition |
kenjiArai | 0:4196bd8bb88f | 212 | * @param Other parameters are set automatically |
kenjiArai | 0:4196bd8bb88f | 213 | */ |
kenjiArai | 0:4196bd8bb88f | 214 | BMX055(I2C& p_i2c); |
kenjiArai | 0:4196bd8bb88f | 215 | |
kenjiArai | 0:4196bd8bb88f | 216 | /** Get accel data |
kenjiArai | 0:4196bd8bb88f | 217 | * @param float type of 3D data address |
kenjiArai | 0:4196bd8bb88f | 218 | */ |
kenjiArai | 0:4196bd8bb88f | 219 | void get_accel(BMX055_ACCEL_TypeDef *acc); |
kenjiArai | 0:4196bd8bb88f | 220 | |
kenjiArai | 0:4196bd8bb88f | 221 | /** Get gyroscope data |
kenjiArai | 0:4196bd8bb88f | 222 | * @param float type of 3D data address |
kenjiArai | 0:4196bd8bb88f | 223 | */ |
kenjiArai | 0:4196bd8bb88f | 224 | void get_gyro(BMX055_GYRO_TypeDef *gyr); |
kenjiArai | 0:4196bd8bb88f | 225 | |
kenjiArai | 0:4196bd8bb88f | 226 | /** Get magnet data |
kenjiArai | 0:4196bd8bb88f | 227 | * @param float type of 3D data address |
kenjiArai | 0:4196bd8bb88f | 228 | */ |
kenjiArai | 0:4196bd8bb88f | 229 | void get_magnet(BMX055_MAGNET_TypeDef *mag); |
kenjiArai | 0:4196bd8bb88f | 230 | |
kenjiArai | 0:4196bd8bb88f | 231 | /** Get Chip temperature data both Acc & Gyro |
kenjiArai | 0:4196bd8bb88f | 232 | * @param none |
kenjiArai | 0:4196bd8bb88f | 233 | * @return temperature data |
kenjiArai | 0:4196bd8bb88f | 234 | */ |
kenjiArai | 0:4196bd8bb88f | 235 | float get_chip_temperature(void); |
kenjiArai | 0:4196bd8bb88f | 236 | |
kenjiArai | 0:4196bd8bb88f | 237 | /** Read BMX055 ID information |
kenjiArai | 0:4196bd8bb88f | 238 | * @param ID information address |
kenjiArai | 0:4196bd8bb88f | 239 | * @return none |
kenjiArai | 0:4196bd8bb88f | 240 | */ |
kenjiArai | 0:4196bd8bb88f | 241 | void read_id_inf(BMX055_ID_INF_TypeDef *id); |
kenjiArai | 0:4196bd8bb88f | 242 | |
kenjiArai | 0:4196bd8bb88f | 243 | /** Check chip is avairable or not |
kenjiArai | 0:4196bd8bb88f | 244 | * @param none |
kenjiArai | 0:4196bd8bb88f | 245 | * @return OK = true, NG = false; |
kenjiArai | 0:4196bd8bb88f | 246 | */ |
kenjiArai | 0:4196bd8bb88f | 247 | bool chip_ready(void); |
kenjiArai | 0:4196bd8bb88f | 248 | |
kenjiArai | 0:4196bd8bb88f | 249 | /** Check chip is avairable or not |
kenjiArai | 0:4196bd8bb88f | 250 | * @param configration parameter |
kenjiArai | 0:4196bd8bb88f | 251 | * @return none |
kenjiArai | 0:4196bd8bb88f | 252 | */ |
kenjiArai | 0:4196bd8bb88f | 253 | void set_parameter(const BMX055_TypeDef *bmx055_parameter); |
kenjiArai | 0:4196bd8bb88f | 254 | |
kenjiArai | 0:4196bd8bb88f | 255 | /** Set I2C clock frequency |
kenjiArai | 0:4196bd8bb88f | 256 | * @param freq. |
kenjiArai | 0:4196bd8bb88f | 257 | * @return none |
kenjiArai | 0:4196bd8bb88f | 258 | */ |
kenjiArai | 0:4196bd8bb88f | 259 | void frequency(int hz); |
kenjiArai | 0:4196bd8bb88f | 260 | |
kenjiArai | 0:4196bd8bb88f | 261 | /** Read register |
kenjiArai | 0:4196bd8bb88f | 262 | * @param register's address |
kenjiArai | 0:4196bd8bb88f | 263 | * @return register data |
kenjiArai | 0:4196bd8bb88f | 264 | */ |
kenjiArai | 0:4196bd8bb88f | 265 | uint8_t read_reg(uint8_t addr); |
kenjiArai | 0:4196bd8bb88f | 266 | |
kenjiArai | 0:4196bd8bb88f | 267 | /** Write register |
kenjiArai | 0:4196bd8bb88f | 268 | * @param register's address |
kenjiArai | 0:4196bd8bb88f | 269 | * @param data |
kenjiArai | 0:4196bd8bb88f | 270 | * @return register data |
kenjiArai | 0:4196bd8bb88f | 271 | */ |
kenjiArai | 0:4196bd8bb88f | 272 | uint8_t write_reg(uint8_t addr, uint8_t data); |
kenjiArai | 0:4196bd8bb88f | 273 | |
kenjiArai | 0:4196bd8bb88f | 274 | protected: |
kenjiArai | 0:4196bd8bb88f | 275 | void initialize(void); |
kenjiArai | 0:4196bd8bb88f | 276 | void check_id(void); |
kenjiArai | 0:4196bd8bb88f | 277 | void set_parameters_to_regs(void); |
kenjiArai | 0:4196bd8bb88f | 278 | |
kenjiArai | 0:4196bd8bb88f | 279 | I2C *_i2c_p; |
kenjiArai | 0:4196bd8bb88f | 280 | I2C &_i2c; |
kenjiArai | 0:4196bd8bb88f | 281 | |
kenjiArai | 0:4196bd8bb88f | 282 | private: |
kenjiArai | 0:4196bd8bb88f | 283 | char dt[16]; // working buffer |
kenjiArai | 0:4196bd8bb88f | 284 | uint8_t chip_addr; |
kenjiArai | 0:4196bd8bb88f | 285 | BMX055_ADDR_INF_TypeDef inf_addr; |
kenjiArai | 0:4196bd8bb88f | 286 | BMX055_ID_INF_TypeDef inf_id; |
kenjiArai | 0:4196bd8bb88f | 287 | |
kenjiArai | 0:4196bd8bb88f | 288 | uint8_t ready_flag; |
kenjiArai | 0:4196bd8bb88f | 289 | |
kenjiArai | 2:1bea0ef16d84 | 290 | |
kenjiArai | 2:1bea0ef16d84 | 291 | |
kenjiArai | 0:4196bd8bb88f | 292 | BMX055_TypeDef bmx055_parameters; |
kenjiArai | 0:4196bd8bb88f | 293 | uint8_t acc_id; |
kenjiArai | 0:4196bd8bb88f | 294 | uint8_t mag_id; |
kenjiArai | 0:4196bd8bb88f | 295 | uint8_t gyr_id; |
kenjiArai | 0:4196bd8bb88f | 296 | }; |
kenjiArai | 0:4196bd8bb88f | 297 | |
kenjiArai | 0:4196bd8bb88f | 298 | #endif // BMX055_H |