Testsetup BMI088 (SEED), gyro ok, Acc Problem T:\T-IMS-IndNav\01_Technisches\70_Hardwareentwicklung\20190828_083342.jpg

Dependencies:   mbed

Committer:
altb2
Date:
Wed Aug 28 08:32:22 2019 +0000
Revision:
0:577a6606809f
First implement, ; acc does not work (it worked once!)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
altb2 0:577a6606809f 1 /*
altb2 0:577a6606809f 2 * A library for Grove - 6-Axis Accelerometer&Gyroscope(BMI088)
altb2 0:577a6606809f 3 *
altb2 0:577a6606809f 4 * Copyright (c) 2018 seeed technology co., ltd.
altb2 0:577a6606809f 5 * Author : Wayen Weng
altb2 0:577a6606809f 6 * Create Time : June 2018
altb2 0:577a6606809f 7 * Change Log :
altb2 0:577a6606809f 8 *
altb2 0:577a6606809f 9 * The MIT License (MIT)
altb2 0:577a6606809f 10 *
altb2 0:577a6606809f 11 * Permission is hereby granted, free of charge, to any person obtaining a copy
altb2 0:577a6606809f 12 * of this software and associated documentation files (the "Software"), to deal
altb2 0:577a6606809f 13 * in the Software without restriction, including without limitation the rights
altb2 0:577a6606809f 14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
altb2 0:577a6606809f 15 * copies of the Software, and to permit persons to whom the Software is
altb2 0:577a6606809f 16 * furnished to do so, subject to the following conditions:
altb2 0:577a6606809f 17 *
altb2 0:577a6606809f 18 * The above copyright notice and this permission notice shall be included in
altb2 0:577a6606809f 19 * all copies or substantial portions of the Software.
altb2 0:577a6606809f 20 *
altb2 0:577a6606809f 21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
altb2 0:577a6606809f 22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
altb2 0:577a6606809f 23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
altb2 0:577a6606809f 24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
altb2 0:577a6606809f 25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
altb2 0:577a6606809f 26 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
altb2 0:577a6606809f 27 * THE SOFTWARE.
altb2 0:577a6606809f 28 */
altb2 0:577a6606809f 29
altb2 0:577a6606809f 30 #include "BMI088.h"
altb2 0:577a6606809f 31
altb2 0:577a6606809f 32 BMI088::BMI088(void) : i2c(PA_10,PA_9)//L432KC
altb2 0:577a6606809f 33 {
altb2 0:577a6606809f 34 devAddrAcc = BMI088_ACC_ADDRESS;
altb2 0:577a6606809f 35 devAddrGyro = BMI088_GYRO_ADDRESS;
altb2 0:577a6606809f 36 i2c.frequency(100000);
altb2 0:577a6606809f 37
altb2 0:577a6606809f 38 }
altb2 0:577a6606809f 39
altb2 0:577a6606809f 40 void BMI088::initialize(void)
altb2 0:577a6606809f 41 {
altb2 0:577a6606809f 42 setAccPoweMode(ACC_ACTIVE);
altb2 0:577a6606809f 43 wait_ms(150);
altb2 0:577a6606809f 44 // setAccOutputDataRate(ODR_25);
altb2 0:577a6606809f 45 wait_ms(50);
altb2 0:577a6606809f 46 setAccScaleRange(RANGE_3G);
altb2 0:577a6606809f 47
altb2 0:577a6606809f 48 setGyroScaleRange(RANGE_500);
altb2 0:577a6606809f 49 setGyroOutputDataRate(ODR_200_BW_23);
altb2 0:577a6606809f 50 setGyroPoweMode(GYRO_NORMAL);
altb2 0:577a6606809f 51 }
altb2 0:577a6606809f 52
altb2 0:577a6606809f 53 bool BMI088::isConnection(void)
altb2 0:577a6606809f 54 {
altb2 0:577a6606809f 55 uint8_t val1 = getGyroID();
altb2 0:577a6606809f 56 uint8_t val2 = getAccID();
altb2 0:577a6606809f 57 return ((val1 == 0x0F) && (val2 == 0x1E));
altb2 0:577a6606809f 58 }
altb2 0:577a6606809f 59
altb2 0:577a6606809f 60 void BMI088::resetAcc(void)
altb2 0:577a6606809f 61 {
altb2 0:577a6606809f 62 write8(ACC, BMI088_ACC_SOFT_RESET, 0xB6);
altb2 0:577a6606809f 63 }
altb2 0:577a6606809f 64
altb2 0:577a6606809f 65 void BMI088::resetGyro(void)
altb2 0:577a6606809f 66 {
altb2 0:577a6606809f 67 write8(GYRO, BMI088_GYRO_SOFT_RESET, 0xB6);
altb2 0:577a6606809f 68 }
altb2 0:577a6606809f 69
altb2 0:577a6606809f 70 uint8_t BMI088::getAccID(void)
altb2 0:577a6606809f 71 {
altb2 0:577a6606809f 72 return read8(ACC, BMI088_ACC_CHIP_ID);
altb2 0:577a6606809f 73 }
altb2 0:577a6606809f 74
altb2 0:577a6606809f 75 uint8_t BMI088::getGyroID(void)
altb2 0:577a6606809f 76 {
altb2 0:577a6606809f 77 return read8(GYRO, BMI088_GYRO_CHIP_ID);
altb2 0:577a6606809f 78 }
altb2 0:577a6606809f 79
altb2 0:577a6606809f 80 void BMI088::setAccPoweMode(acc_power_type_t mode)
altb2 0:577a6606809f 81 {
altb2 0:577a6606809f 82 if(mode == ACC_ACTIVE)
altb2 0:577a6606809f 83 {
altb2 0:577a6606809f 84 write8(ACC, BMI088_ACC_PWR_CTRl, 0x04);
altb2 0:577a6606809f 85 write8(ACC, BMI088_ACC_PWR_CONF, 0x00);
altb2 0:577a6606809f 86 }
altb2 0:577a6606809f 87 else if(mode == ACC_SUSPEND)
altb2 0:577a6606809f 88 {
altb2 0:577a6606809f 89 write8(ACC, BMI088_ACC_PWR_CONF, 0x03);
altb2 0:577a6606809f 90 write8(ACC, BMI088_ACC_PWR_CTRl, 0x00);
altb2 0:577a6606809f 91 }
altb2 0:577a6606809f 92 }
altb2 0:577a6606809f 93
altb2 0:577a6606809f 94 void BMI088::setGyroPoweMode(gyro_power_type_t mode)
altb2 0:577a6606809f 95 {
altb2 0:577a6606809f 96 if(mode == GYRO_NORMAL)
altb2 0:577a6606809f 97 {
altb2 0:577a6606809f 98 write8(GYRO, BMI088_GYRO_LPM_1, (uint8_t)GYRO_NORMAL);
altb2 0:577a6606809f 99 }
altb2 0:577a6606809f 100 else if(mode == GYRO_SUSPEND)
altb2 0:577a6606809f 101 {
altb2 0:577a6606809f 102 write8(GYRO, BMI088_GYRO_LPM_1, (uint8_t)GYRO_SUSPEND);
altb2 0:577a6606809f 103 }
altb2 0:577a6606809f 104 else if(mode == GYRO_DEEP_SUSPEND)
altb2 0:577a6606809f 105 {
altb2 0:577a6606809f 106 write8(GYRO, BMI088_GYRO_LPM_1, (uint8_t)GYRO_DEEP_SUSPEND);
altb2 0:577a6606809f 107 }
altb2 0:577a6606809f 108 }
altb2 0:577a6606809f 109
altb2 0:577a6606809f 110 void BMI088::setAccScaleRange(acc_scale_type_t range)
altb2 0:577a6606809f 111 {
altb2 0:577a6606809f 112 if(range == RANGE_3G) accRange = 3000;
altb2 0:577a6606809f 113 else if(range == RANGE_6G) accRange = 6000;
altb2 0:577a6606809f 114 else if(range == RANGE_12G) accRange = 12000;
altb2 0:577a6606809f 115 else if(range == RANGE_24G) accRange = 24000;
altb2 0:577a6606809f 116
altb2 0:577a6606809f 117 write8(ACC, BMI088_ACC_RANGE, (uint8_t)range);
altb2 0:577a6606809f 118 }
altb2 0:577a6606809f 119
altb2 0:577a6606809f 120 void BMI088::setAccOutputDataRate(acc_odr_type_t odr)
altb2 0:577a6606809f 121 {
altb2 0:577a6606809f 122 uint8_t data = 0;
altb2 0:577a6606809f 123
altb2 0:577a6606809f 124 data = read8(ACC, BMI088_ACC_CONF);
altb2 0:577a6606809f 125 data = data & 0xf0; // get higher 4 bits
altb2 0:577a6606809f 126 data = data | (uint8_t)odr;
altb2 0:577a6606809f 127 wait_ms(10);
altb2 0:577a6606809f 128 write8(ACC, BMI088_ACC_CONF, data);
altb2 0:577a6606809f 129 }
altb2 0:577a6606809f 130
altb2 0:577a6606809f 131 void BMI088::setGyroScaleRange(gyro_scale_type_t range)
altb2 0:577a6606809f 132 {
altb2 0:577a6606809f 133 if(range == RANGE_2000) gyroRange = 2000;
altb2 0:577a6606809f 134 else if(range == RANGE_1000) gyroRange = 1000;
altb2 0:577a6606809f 135 else if(range == RANGE_500) gyroRange = 500;
altb2 0:577a6606809f 136 else if(range == RANGE_250) gyroRange = 250;
altb2 0:577a6606809f 137 else if(range == RANGE_125) gyroRange = 125;
altb2 0:577a6606809f 138
altb2 0:577a6606809f 139 write8(GYRO, BMI088_GYRO_RANGE, (uint8_t)range);
altb2 0:577a6606809f 140 }
altb2 0:577a6606809f 141
altb2 0:577a6606809f 142 void BMI088::setGyroOutputDataRate(gyro_odr_type_t odr)
altb2 0:577a6606809f 143 {
altb2 0:577a6606809f 144 write8(GYRO, BMI088_GYRO_BAND_WIDTH, (uint8_t)odr);
altb2 0:577a6606809f 145 }
altb2 0:577a6606809f 146
altb2 0:577a6606809f 147 void BMI088::getAcceleration(float* x, float* y, float* z)
altb2 0:577a6606809f 148 {
altb2 0:577a6606809f 149 char buf[6] = {0};
altb2 0:577a6606809f 150 uint16_t ax = 0, ay = 0, az = 0;
altb2 0:577a6606809f 151 int16_t value = 0;
altb2 0:577a6606809f 152
altb2 0:577a6606809f 153 read(ACC, BMI088_ACC_X_LSB, buf, 6);
altb2 0:577a6606809f 154
altb2 0:577a6606809f 155 //printf("ACCBUFF: %02X %02X %02X %02X %02X %02X\r\n",buf[0],buf[1],buf[2],buf[3],buf[4],buf[5]);
altb2 0:577a6606809f 156 ax = buf[0] | (buf[1] << 8);
altb2 0:577a6606809f 157 ay = buf[2] | (buf[3] << 8);
altb2 0:577a6606809f 158 az = buf[4] | (buf[5] << 8);
altb2 0:577a6606809f 159
altb2 0:577a6606809f 160 value = (int16_t)ax;
altb2 0:577a6606809f 161 *x = accRange * value / 32768000 * 9.81f; // units: m/s^2
altb2 0:577a6606809f 162
altb2 0:577a6606809f 163 value = (int16_t)ay;
altb2 0:577a6606809f 164 *y = accRange * value / 32768000 * 9.81f; // units: m/s^2
altb2 0:577a6606809f 165
altb2 0:577a6606809f 166 value = (int16_t)az;
altb2 0:577a6606809f 167 *z = accRange * value / 32768000 * 9.81f; // units: m/s^2
altb2 0:577a6606809f 168 }
altb2 0:577a6606809f 169
altb2 0:577a6606809f 170 float BMI088::getAccelerationX(void)
altb2 0:577a6606809f 171 {
altb2 0:577a6606809f 172 uint16_t ax = 0;
altb2 0:577a6606809f 173 float value = 0;
altb2 0:577a6606809f 174
altb2 0:577a6606809f 175 ax = read16(ACC, BMI088_ACC_X_LSB);
altb2 0:577a6606809f 176
altb2 0:577a6606809f 177 value = (int16_t)ax;
altb2 0:577a6606809f 178 value = accRange * value / 32768000 * 9.81f; // units: m/s^2
altb2 0:577a6606809f 179
altb2 0:577a6606809f 180 return value;
altb2 0:577a6606809f 181 }
altb2 0:577a6606809f 182
altb2 0:577a6606809f 183 float BMI088::getAccelerationY(void)
altb2 0:577a6606809f 184 {
altb2 0:577a6606809f 185 uint16_t ay = 0;
altb2 0:577a6606809f 186 float value = 0;
altb2 0:577a6606809f 187
altb2 0:577a6606809f 188 ay = read16(ACC, BMI088_ACC_Y_LSB);
altb2 0:577a6606809f 189
altb2 0:577a6606809f 190 value = (int16_t)ay;
altb2 0:577a6606809f 191 value = accRange * value / 32768000 * 9.81f; // units: m/s^2
altb2 0:577a6606809f 192
altb2 0:577a6606809f 193 return value;
altb2 0:577a6606809f 194 }
altb2 0:577a6606809f 195
altb2 0:577a6606809f 196 float BMI088::getAccelerationZ(void)
altb2 0:577a6606809f 197 {
altb2 0:577a6606809f 198 uint16_t az = 0;
altb2 0:577a6606809f 199 float value = 0;
altb2 0:577a6606809f 200
altb2 0:577a6606809f 201 az = read16(ACC, BMI088_ACC_Z_LSB);
altb2 0:577a6606809f 202
altb2 0:577a6606809f 203
altb2 0:577a6606809f 204 value = (int16_t)az;
altb2 0:577a6606809f 205 value = accRange * value / 32768000 * 9.81f; // units: m/s^2
altb2 0:577a6606809f 206
altb2 0:577a6606809f 207 return value;
altb2 0:577a6606809f 208 }
altb2 0:577a6606809f 209
altb2 0:577a6606809f 210 void BMI088::getGyroscope(float* x, float* y, float* z)
altb2 0:577a6606809f 211 {
altb2 0:577a6606809f 212 char buf[6] = {0};
altb2 0:577a6606809f 213 uint16_t gx = 0, gy = 0, gz = 0;
altb2 0:577a6606809f 214 int16_t value = 0;
altb2 0:577a6606809f 215
altb2 0:577a6606809f 216 read(GYRO, BMI088_GYRO_RATE_X_LSB, buf, 6);
altb2 0:577a6606809f 217
altb2 0:577a6606809f 218 gx = buf[0] | (buf[1] << 8);
altb2 0:577a6606809f 219 gy = buf[2] | (buf[3] << 8);
altb2 0:577a6606809f 220 gz = buf[4] | (buf[5] << 8);
altb2 0:577a6606809f 221
altb2 0:577a6606809f 222 value = (int16_t)gx;
altb2 0:577a6606809f 223 *x = gyroRange * value / 32768 * 3.1415927f/180.0f;
altb2 0:577a6606809f 224
altb2 0:577a6606809f 225 value = (int16_t)gy;
altb2 0:577a6606809f 226 *y = gyroRange * value / 32768 * 3.1415927f/180.0f;
altb2 0:577a6606809f 227
altb2 0:577a6606809f 228 value = (int16_t)gz;
altb2 0:577a6606809f 229 *z = gyroRange * value / 32768 * 3.1415927f/180.0f;
altb2 0:577a6606809f 230 }
altb2 0:577a6606809f 231
altb2 0:577a6606809f 232 float BMI088::getGyroscopeX(void)
altb2 0:577a6606809f 233 {
altb2 0:577a6606809f 234 uint16_t gx = 0;
altb2 0:577a6606809f 235 float value = 0;
altb2 0:577a6606809f 236
altb2 0:577a6606809f 237 gx = read16(GYRO, BMI088_GYRO_RATE_X_LSB);
altb2 0:577a6606809f 238
altb2 0:577a6606809f 239 value = (int16_t)gx;
altb2 0:577a6606809f 240 value = gyroRange * value / 32768 * 3.1415927f/180.0f;
altb2 0:577a6606809f 241
altb2 0:577a6606809f 242 return value;
altb2 0:577a6606809f 243 }
altb2 0:577a6606809f 244
altb2 0:577a6606809f 245 float BMI088::getGyroscopeY(void)
altb2 0:577a6606809f 246 {
altb2 0:577a6606809f 247 uint16_t gy = 0;
altb2 0:577a6606809f 248 float value = 0;
altb2 0:577a6606809f 249
altb2 0:577a6606809f 250 gy = read16(GYRO, BMI088_GYRO_RATE_Y_LSB);
altb2 0:577a6606809f 251
altb2 0:577a6606809f 252 value = (int16_t)gy;
altb2 0:577a6606809f 253 value = gyroRange * value / 32768 * 3.1415927f/180.0f;
altb2 0:577a6606809f 254
altb2 0:577a6606809f 255 return value;
altb2 0:577a6606809f 256 }
altb2 0:577a6606809f 257
altb2 0:577a6606809f 258 float BMI088::getGyroscopeZ(void)
altb2 0:577a6606809f 259 {
altb2 0:577a6606809f 260 uint16_t gz = 0;
altb2 0:577a6606809f 261 float value = 0;
altb2 0:577a6606809f 262
altb2 0:577a6606809f 263 gz = read16(GYRO, BMI088_GYRO_RATE_Z_LSB);
altb2 0:577a6606809f 264
altb2 0:577a6606809f 265 value = (int16_t)gz;
altb2 0:577a6606809f 266 value = gyroRange * value / 32768 * 3.1415927f/180.0f;
altb2 0:577a6606809f 267
altb2 0:577a6606809f 268 return value;
altb2 0:577a6606809f 269 }
altb2 0:577a6606809f 270
altb2 0:577a6606809f 271 uint16_t BMI088::getTemperature(void)
altb2 0:577a6606809f 272 {
altb2 0:577a6606809f 273 uint16_t data = 0;
altb2 0:577a6606809f 274
altb2 0:577a6606809f 275 data = read16Be(ACC, BMI088_ACC_TEMP_MSB);
altb2 0:577a6606809f 276 data = data >> 5;
altb2 0:577a6606809f 277
altb2 0:577a6606809f 278 if(data > 1023) data = data - 2048;
altb2 0:577a6606809f 279
altb2 0:577a6606809f 280 return (uint16_t)(data / 8 + 23);
altb2 0:577a6606809f 281 }
altb2 0:577a6606809f 282
altb2 0:577a6606809f 283 void BMI088::write8(device_type_t dev, char reg, uint8_t val)
altb2 0:577a6606809f 284 {
altb2 0:577a6606809f 285 int addr = 0;
altb2 0:577a6606809f 286
altb2 0:577a6606809f 287 if(dev) addr = devAddrGyro;
altb2 0:577a6606809f 288 else addr = devAddrAcc;
altb2 0:577a6606809f 289
altb2 0:577a6606809f 290 int succw = i2c.write(addr, &reg, val);
altb2 0:577a6606809f 291 // printf("Write 8 succes: %d\r\n",succw);
altb2 0:577a6606809f 292
altb2 0:577a6606809f 293 /*Wire.beginTransmission(addr);
altb2 0:577a6606809f 294 Wire.write(reg);
altb2 0:577a6606809f 295 Wire.write(val);
altb2 0:577a6606809f 296 Wire.endTransmission();*/
altb2 0:577a6606809f 297 }
altb2 0:577a6606809f 298
altb2 0:577a6606809f 299 char BMI088::read8(device_type_t dev, char reg)
altb2 0:577a6606809f 300 {
altb2 0:577a6606809f 301 int addr =0;;
altb2 0:577a6606809f 302 char data = 0;
altb2 0:577a6606809f 303
altb2 0:577a6606809f 304 if(dev) addr = devAddrGyro;
altb2 0:577a6606809f 305 else addr = devAddrAcc;
altb2 0:577a6606809f 306
altb2 0:577a6606809f 307 int succw = i2c.write(addr, &reg, 0x01);
altb2 0:577a6606809f 308 int succr = i2c.read( addr, &data, 0x01);
altb2 0:577a6606809f 309
altb2 0:577a6606809f 310 /*Wire.beginTransmission(addr);
altb2 0:577a6606809f 311 Wire.write(reg);
altb2 0:577a6606809f 312 Wire.endTransmission();
altb2 0:577a6606809f 313
altb2 0:577a6606809f 314 Wire.requestFrom(addr, 1);
altb2 0:577a6606809f 315 while(Wire.available())
altb2 0:577a6606809f 316 {
altb2 0:577a6606809f 317 data = Wire.read();
altb2 0:577a6606809f 318 }
altb2 0:577a6606809f 319 */
altb2 0:577a6606809f 320 return data;
altb2 0:577a6606809f 321 }
altb2 0:577a6606809f 322
altb2 0:577a6606809f 323 uint16_t BMI088::read16(device_type_t dev, char reg)
altb2 0:577a6606809f 324 {
altb2 0:577a6606809f 325 int addr = 0;
altb2 0:577a6606809f 326 char buf[2];
altb2 0:577a6606809f 327
altb2 0:577a6606809f 328 if(dev) addr = devAddrGyro;
altb2 0:577a6606809f 329 else addr = devAddrAcc;
altb2 0:577a6606809f 330
altb2 0:577a6606809f 331 int succw = i2c.write(addr, &reg, 0x01);
altb2 0:577a6606809f 332 int succr = i2c.read( addr, buf, 0x02);
altb2 0:577a6606809f 333
altb2 0:577a6606809f 334
altb2 0:577a6606809f 335 /*Wire.beginTransmission(addr);
altb2 0:577a6606809f 336 Wire.write(reg);
altb2 0:577a6606809f 337 Wire.endTransmission();
altb2 0:577a6606809f 338
altb2 0:577a6606809f 339 Wire.requestFrom(addr, 2);
altb2 0:577a6606809f 340 while(Wire.available())
altb2 0:577a6606809f 341 {
altb2 0:577a6606809f 342 lsb = Wire.read();
altb2 0:577a6606809f 343 msb = Wire.read();
altb2 0:577a6606809f 344 }
altb2 0:577a6606809f 345 */
altb2 0:577a6606809f 346 return (buf[0] | (buf[1] << 8));
altb2 0:577a6606809f 347 }
altb2 0:577a6606809f 348
altb2 0:577a6606809f 349 uint16_t BMI088::read16Be(device_type_t dev, char reg)
altb2 0:577a6606809f 350 {
altb2 0:577a6606809f 351 uint8_t addr = 0;
altb2 0:577a6606809f 352 uint16_t msb = 0, lsb = 0;
altb2 0:577a6606809f 353
altb2 0:577a6606809f 354 if(dev) addr = devAddrGyro;
altb2 0:577a6606809f 355 else addr = devAddrAcc;
altb2 0:577a6606809f 356
altb2 0:577a6606809f 357 /* Wire.beginTransmission(addr);
altb2 0:577a6606809f 358 Wire.write(reg);
altb2 0:577a6606809f 359 Wire.endTransmission();
altb2 0:577a6606809f 360
altb2 0:577a6606809f 361 Wire.requestFrom(addr, 2);
altb2 0:577a6606809f 362 while(Wire.available())
altb2 0:577a6606809f 363 {
altb2 0:577a6606809f 364 msb = Wire.read();
altb2 0:577a6606809f 365 lsb = Wire.read();
altb2 0:577a6606809f 366 }
altb2 0:577a6606809f 367 */
altb2 0:577a6606809f 368 return (lsb | (msb << 8));
altb2 0:577a6606809f 369 }
altb2 0:577a6606809f 370
altb2 0:577a6606809f 371 uint32_t BMI088::read24(device_type_t dev, char reg)
altb2 0:577a6606809f 372 {
altb2 0:577a6606809f 373 int addr;
altb2 0:577a6606809f 374 char data = 0;
altb2 0:577a6606809f 375
altb2 0:577a6606809f 376 if(dev) addr = devAddrGyro;
altb2 0:577a6606809f 377 else addr = devAddrAcc;
altb2 0:577a6606809f 378
altb2 0:577a6606809f 379 /* Wire.beginTransmission(addr);
altb2 0:577a6606809f 380 Wire.write(reg);
altb2 0:577a6606809f 381 Wire.endTransmission();
altb2 0:577a6606809f 382
altb2 0:577a6606809f 383 Wire.requestFrom(addr, 3);
altb2 0:577a6606809f 384 while(Wire.available())
altb2 0:577a6606809f 385 {
altb2 0:577a6606809f 386 lsb = Wire.read();
altb2 0:577a6606809f 387 msb = Wire.read();
altb2 0:577a6606809f 388 hsb = Wire.read();
altb2 0:577a6606809f 389 }
altb2 0:577a6606809f 390 */
altb2 0:577a6606809f 391 return 0;//(lsb | (msb << 8) | (hsb << 16));
altb2 0:577a6606809f 392 }
altb2 0:577a6606809f 393
altb2 0:577a6606809f 394 void BMI088::read(device_type_t dev, char reg, char *buf, uint16_t len)
altb2 0:577a6606809f 395 {
altb2 0:577a6606809f 396 int addr;
altb2 0:577a6606809f 397
altb2 0:577a6606809f 398 if(dev) addr = devAddrGyro;
altb2 0:577a6606809f 399 else addr = devAddrAcc;
altb2 0:577a6606809f 400 int succw = i2c.write(addr, &reg, 0x01);
altb2 0:577a6606809f 401 int succr = i2c.read( addr, buf, len);
altb2 0:577a6606809f 402 //printf("\r\nread: succes w: %d, succes r: %d, buf[1]:%d\r\n",succw,succr,buf[1]);
altb2 0:577a6606809f 403 /*
altb2 0:577a6606809f 404 Wire.beginTransmission(addr);
altb2 0:577a6606809f 405 Wire.write(reg);
altb2 0:577a6606809f 406 Wire.endTransmission();
altb2 0:577a6606809f 407
altb2 0:577a6606809f 408 Wire.requestFrom(addr, len);
altb2 0:577a6606809f 409 while(Wire.available())
altb2 0:577a6606809f 410 {
altb2 0:577a6606809f 411 for(uint16_t i = 0; i < len; i ++) buf[i] = Wire.read();
altb2 0:577a6606809f 412 }
altb2 0:577a6606809f 413 */
altb2 0:577a6606809f 414 }