Skip to content

Commit e8b8a5d

Browse files
sandeepmistrycalvinatintel
authored andcommitted
Change set/get accelerometer and gyro offsets to use floats values
This makes it consistent with other API changes to convert the register values to floats and vice versa.
1 parent ffc51ef commit e8b8a5d

File tree

3 files changed

+55
-28
lines changed

3 files changed

+55
-28
lines changed

libraries/CurieIMU/examples/RawImuDataSerial/RawImuDataSerial.ino

+6-6
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,12 @@ void setup() {
7272

7373
// To manually configure offset compensation values,
7474
// use the following methods instead of the autoCalibrate...() methods below
75-
//CurieIMU.setAccelerometerOffset(X_AXIS,128);
76-
//CurieIMU.setAccelerometerOffset(Y_AXIS,-4);
77-
//CurieIMU.setAccelerometerOffset(Z_AXIS,127);
78-
//CurieIMU.setGyroOffset(X_AXIS,129);
79-
//CurieIMU.setGyroOffset(Y_AXIS,-1);
80-
//CurieIMU.setGyroOffset(Z_AXIS, 254);
75+
//CurieIMU.setAccelerometerOffset(X_AXIS,495.3);
76+
//CurieIMU.setAccelerometerOffset(Y_AXIS,-15.6);
77+
//CurieIMU.setAccelerometerOffset(Z_AXIS,491.4);
78+
//CurieIMU.setGyroOffset(X_AXIS,7.869);
79+
//CurieIMU.setGyroOffset(Y_AXIS,-0.061);
80+
//CurieIMU.setGyroOffset(Z_AXIS,15.494);
8181

8282
Serial.println("About to calibrate. Make sure your board is stable and upright");
8383
delay(5000);

libraries/CurieIMU/src/CurieIMU.cpp

+42-18
Original file line numberDiff line numberDiff line change
@@ -332,53 +332,77 @@ bool CurieIMUClass::accelerometerOffsetEnabled()
332332
return getAccelOffsetEnabled();
333333
}
334334

335-
int CurieIMUClass::getGyroOffset(int axis)
335+
float CurieIMUClass::getGyroOffset(int axis)
336336
{
337+
int bmiOffset;
338+
337339
if (axis == X_AXIS) {
338-
return getXGyroOffset();
340+
bmiOffset = getXGyroOffset();
339341
} else if (axis == Y_AXIS) {
340-
return getYGyroOffset();
342+
bmiOffset = getYGyroOffset();
341343
} else if (axis == Z_AXIS) {
342-
return getZGyroOffset();
344+
bmiOffset = getZGyroOffset();
345+
} else {
346+
return -1;
343347
}
344348

345-
return -1;
349+
return (bmiOffset * 0.061);
346350
}
347351

348-
int CurieIMUClass::getAccelerometerOffset(int axis)
352+
float CurieIMUClass::getAccelerometerOffset(int axis)
349353
{
354+
int bmiOffset;
355+
350356
if (axis == X_AXIS) {
351-
return getXAccelOffset();
357+
bmiOffset = getXAccelOffset();
352358
} else if (axis == Y_AXIS) {
353-
return getYAccelOffset();
359+
bmiOffset = getYAccelOffset();
354360
} else if (axis == Z_AXIS) {
355-
return getZAccelOffset();
361+
bmiOffset = getZAccelOffset();
362+
} else {
363+
return -1;
356364
}
357365

358-
return -1;
366+
return (bmiOffset * 3.9);
359367
}
360368

361-
void CurieIMUClass::setGyroOffset(int axis, int offset)
369+
void CurieIMUClass::setGyroOffset(int axis, float offset)
362370
{
371+
int bmiOffset = offset / 0.061;
372+
373+
if (bmiOffset < -512) {
374+
bmiOffset = -512;
375+
} else if (bmiOffset > 511) {
376+
bmiOffset = 511;
377+
}
378+
363379
if (axis == X_AXIS) {
364-
setXGyroOffset(axis);
380+
setXGyroOffset(bmiOffset);
365381
} else if (axis == Y_AXIS) {
366-
setYGyroOffset(axis);
382+
setYGyroOffset(bmiOffset);
367383
} else if (axis == Z_AXIS) {
368-
setZGyroOffset(axis);
384+
setZGyroOffset(bmiOffset);
369385
}
370386

371387
setGyroOffsetEnabled(true);
372388
}
373389

374-
void CurieIMUClass::setAccelerometerOffset(int axis, int offset)
390+
void CurieIMUClass::setAccelerometerOffset(int axis, float offset)
375391
{
392+
int bmiOffset = offset / 3.9;
393+
394+
if (bmiOffset < -128) {
395+
bmiOffset = -128;
396+
} else if (bmiOffset > 127) {
397+
bmiOffset = 127;
398+
}
399+
376400
if (axis == X_AXIS) {
377-
setXAccelOffset(axis);
401+
setXAccelOffset(bmiOffset);
378402
} else if (axis == Y_AXIS) {
379-
setYAccelOffset(axis);
403+
setYAccelOffset(bmiOffset);
380404
} else if (axis == Z_AXIS) {
381-
setZAccelOffset(axis);
405+
setZAccelOffset(bmiOffset);
382406
}
383407

384408
setAccelOffsetEnabled(true);

libraries/CurieIMU/src/CurieIMU.h

+7-4
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,14 @@ class CurieIMUClass : public BMI160Class {
120120
bool gyroOffsetEnabled();
121121
bool accelerometerOffsetEnabled();
122122

123-
int getGyroOffset(int axis);
124-
int getAccelerometerOffset(int axis);
123+
float getGyroOffset(int axis);
124+
float getAccelerometerOffset(int axis);
125125

126-
void setGyroOffset(int axis, int offset);
127-
void setAccelerometerOffset(int axis, int offset);
126+
// supported values: -31.171 to 31.171 (degrees/second), in steps of 0.061 degrees/second
127+
void setGyroOffset(int axis, float offset);
128+
129+
// supported values: -495.3 (mg) to 495.3 (mg), in steps of 3.9 mg
130+
void setAccelerometerOffset(int axis, float offset);
128131

129132
// supported values:
130133
// CURIE_IMU_FREEFALL: 3.91 to 1995.46 (mg), in steps of 7.81 mg

0 commit comments

Comments
 (0)