@@ -232,14 +232,19 @@ void CurieIMUClass::setGyroRange(int range)
232
232
233
233
if (range >= 2000 ) {
234
234
bmiRange = BMI160_GYRO_RANGE_2000;
235
+ gyro_range 2000 .0f ;
235
236
} else if (range >= 1000 ) {
236
237
bmiRange = BMI160_GYRO_RANGE_1000;
238
+ gyro_range = 1000 .0f ;
237
239
} else if (range >= 500 ) {
238
240
bmiRange = BMI160_GYRO_RANGE_500;
241
+ gyro_range = 500 .0f ;
239
242
} else if (range >= 250 ) {
240
243
bmiRange = BMI160_GYRO_RANGE_250;
244
+ gyro_range = 250 .0f ;
241
245
} else {
242
246
bmiRange = BMI160_GYRO_RANGE_125;
247
+ gyro_range = 125 .0f ;
243
248
}
244
249
245
250
setFullScaleGyroRange (bmiRange);
@@ -277,12 +282,16 @@ void CurieIMUClass::setAccelerometerRange(int range)
277
282
278
283
if (range <= 2 ) {
279
284
bmiRange = BMI160_ACCEL_RANGE_2G;
285
+ accel_range = 2 .0f ;
280
286
} else if (range <= 4 ) {
281
287
bmiRange = BMI160_ACCEL_RANGE_4G;
288
+ accel_range = 4 .0f ;
282
289
} else if (range <= 8 ) {
283
290
bmiRange = BMI160_ACCEL_RANGE_8G;
291
+ accel_range = 8 .0f ;
284
292
} else {
285
293
bmiRange = BMI160_ACCEL_RANGE_16G;
294
+ accel_range = 16 .0f ;
286
295
}
287
296
288
297
setFullScaleAccelRange (bmiRange);
@@ -1556,6 +1565,16 @@ void CurieIMUClass::setStepDetectionMode(int mode)
1556
1565
BMI160Class::setStepDetectionMode ((BMI160StepMode)mode);
1557
1566
}
1558
1567
1568
+ float convertRaw (int16_t raw, float range)
1569
+ {
1570
+ float slope;
1571
+ float val;
1572
+
1573
+ val = (float ) raw;
1574
+ slope = (range * 2 .0f ) / BMI160_SENSOR_RANGE;
1575
+ return -(range) + slope * (val + BMI160_SENSOR_LOW);
1576
+ }
1577
+
1559
1578
void CurieIMUClass::readMotionSensor (int & ax, int & ay, int & az, int & gx, int & gy, int & gz)
1560
1579
{
1561
1580
short sax, say, saz, sgx, sgy, sgz;
@@ -1570,6 +1589,21 @@ void CurieIMUClass::readMotionSensor(int& ax, int& ay, int& az, int& gx, int& gy
1570
1589
gz = sgz;
1571
1590
}
1572
1591
1592
+ void CurieIMUClass::readMotionSensor (float & ax, float & ay, float & az,
1593
+ float & gx, float & gy, float & gz)
1594
+ {
1595
+ int16_t sax, say, saz, sgx, sgy, sgz;
1596
+
1597
+ getMotion6 (&sax, &say, &saz, &sgx, &sgy, &sgz);
1598
+
1599
+ ax = convertRaw (sax, accel_range);
1600
+ ay = convertRaw (say, accel_range);
1601
+ az = convertRaw (saz, accel_range);
1602
+ gx = convertRaw (sgx, gyro_range);
1603
+ gy = convertRaw (sgy, gyro_range);
1604
+ gz = convertRaw (sgz, gyro_range);
1605
+ }
1606
+
1573
1607
void CurieIMUClass::readAccelerometer (int & x, int & y, int & z)
1574
1608
{
1575
1609
short sx, sy, sz;
@@ -1581,6 +1615,17 @@ void CurieIMUClass::readAccelerometer(int& x, int& y, int& z)
1581
1615
z = sz;
1582
1616
}
1583
1617
1618
+ void CurieIMUClass::readAccelerometer (float & x, float & y, float & z)
1619
+ {
1620
+ int16_t sx, sy, sz;
1621
+
1622
+ getAcceleration (&sx, &sy, &sz);
1623
+
1624
+ x = convertRaw (sx, accel_range);
1625
+ y = convertRaw (sy, accel_range);
1626
+ z = convertRaw (sz, accel_range);
1627
+ }
1628
+
1584
1629
void CurieIMUClass::readGyro (int & x, int & y, int & z)
1585
1630
{
1586
1631
short sx, sy, sz;
@@ -1592,6 +1637,17 @@ void CurieIMUClass::readGyro(int& x, int& y, int& z)
1592
1637
z = sz;
1593
1638
}
1594
1639
1640
+ void CurieIMUClass::readGyro (float & x, float & y, float & z)
1641
+ {
1642
+ int16_t sx, sy, sz;
1643
+
1644
+ getRotation (&sx, &sy, &sz);
1645
+
1646
+ x = convertRaw (sx, gyro_range);
1647
+ y = convertRaw (sy, gyro_range);
1648
+ z = convertRaw (sz, gyro_range);
1649
+ }
1650
+
1595
1651
int CurieIMUClass::readAccelerometer (int axis)
1596
1652
{
1597
1653
if (axis == X_AXIS) {
@@ -1605,6 +1661,23 @@ int CurieIMUClass::readAccelerometer(int axis)
1605
1661
return 0 ;
1606
1662
}
1607
1663
1664
+ float CurieIMUClass::readAccelerometer (int axis)
1665
+ {
1666
+ int16_t raw;
1667
+
1668
+ if (axis == X_AXIS) {
1669
+ raw = getAccelerationX ();
1670
+ } else if (axis == Y_AXIS) {
1671
+ raw = getAccelerationY ();
1672
+ } else if (axis == Z_AXIS) {
1673
+ raw = getAccelerationZ ();
1674
+ } else {
1675
+ return 0 ;
1676
+ }
1677
+
1678
+ return convertRaw (raw, accel_range);
1679
+ }
1680
+
1608
1681
int CurieIMUClass::readGyro (int axis)
1609
1682
{
1610
1683
if (axis == X_AXIS) {
@@ -1618,6 +1691,23 @@ int CurieIMUClass::readGyro(int axis)
1618
1691
return 0 ;
1619
1692
}
1620
1693
1694
+ float CurieIMUClass::readGyro (int axis)
1695
+ {
1696
+ int16_t raw;
1697
+
1698
+ if (axis == X_AXIS) {
1699
+ raw = getRotationX ();
1700
+ } else if (axis == Y_AXIS) {
1701
+ raw = getRotationY ();
1702
+ } else if (axis == Z_AXIS) {
1703
+ raw = getRotationZ ();
1704
+ } else {
1705
+ return 0 ;
1706
+ }
1707
+
1708
+ return convertRaw (raw, gyro_range);
1709
+ }
1710
+
1621
1711
int CurieIMUClass::readTemperature ()
1622
1712
{
1623
1713
return getTemperature ();
0 commit comments