Library for Bosch Sensortech BMI160 IMU
Dependents: MAX32630FTHR_BALANCE_BOT MPSMAX_copy MAX32630FTHR_BALANCE_BOT SELF_BALANCING_BOT
Diff: bmi160.cpp
- Revision:
- 9:ca6b5fecdd63
- Parent:
- 8:a89b529b1d96
- Child:
- 10:9e219f2f1fb3
--- a/bmi160.cpp Tue Dec 20 00:10:04 2016 +0000 +++ b/bmi160.cpp Tue Dec 20 01:08:33 2016 +0000 @@ -34,6 +34,9 @@ #include "bmi160.h" +const struct BMI160::AccConfig BMI160::DEFAULT_ACC_CONFIG = {SENS_2G, ACC_US_OFF, ACC_BWP_2, ACC_ODR_8}; + + //***************************************************************************** int32_t BMI160::setSensorPowerMode(Sensors sensor, PowerModes pwrMode) { @@ -94,7 +97,7 @@ //***************************************************************************** -int32_t BMI160::getAccAxis(SensorAxis axis, AxisData &data) +int32_t BMI160::getAccAxis(SensorAxis axis, AxisData &data, AccConfig accConfig) { uint8_t localData[2]; int32_t rtnVal; @@ -121,7 +124,25 @@ if(rtnVal == RTN_NO_ERROR) { data.raw = ((localData[1] << 8) | localData[0]); - data.scaled = (data.raw/16384.0F); //only 2G range right now + switch(accConfig.range) + { + //magic numbers are typical values for LSB/g from EC table + case SENS_2G: + data.scaled = (data.raw/16384.0F); + break; + + case SENS_4G: + data.scaled = (data.raw/8192.0F); + break; + + case SENS_8G: + data.scaled = (data.raw/4096.0F); + break; + + case SENS_16G: + data.scaled = (data.raw/2048.0F); + break; + } } return rtnVal; @@ -129,7 +150,7 @@ //***************************************************************************** -int32_t BMI160::getAccXYZ(SensorData &data) +int32_t BMI160::getAccXYZ(SensorData &data, AccConfig accConfig) { uint8_t localData[6]; int32_t rtnVal = readBlock(DATA_14, DATA_19, localData); @@ -140,10 +161,33 @@ data.yAxis.raw = ((localData[3] << 8) | localData[2]); data.zAxis.raw = ((localData[5] << 8) | localData[4]); - //only 2G range right now - data.xAxis.scaled = (data.xAxis.raw/16384.0F); - data.yAxis.scaled = (data.yAxis.raw/16384.0F); - data.zAxis.scaled = (data.zAxis.raw/16384.0F); + switch(accConfig.range) + { + //magic numbers are typical values for LSB/g from EC table + case SENS_2G: + data.xAxis.scaled = (data.xAxis.raw/16384.0F); + data.yAxis.scaled = (data.yAxis.raw/16384.0F); + data.zAxis.scaled = (data.zAxis.raw/16384.0F); + break; + + case SENS_4G: + data.xAxis.scaled = (data.xAxis.raw/8192.0F); + data.yAxis.scaled = (data.yAxis.raw/8192.0F); + data.zAxis.scaled = (data.zAxis.raw/8192.0F); + break; + + case SENS_8G: + data.xAxis.scaled = (data.xAxis.raw/4096.0F); + data.yAxis.scaled = (data.yAxis.raw/4096.0F); + data.zAxis.scaled = (data.zAxis.raw/4096.0F); + break; + + case SENS_16G: + data.xAxis.scaled = (data.xAxis.raw/2048.0F); + data.yAxis.scaled = (data.yAxis.raw/2048.0F); + data.zAxis.scaled = (data.zAxis.raw/2048.0F); + break; + } } return rtnVal;