@@ -98,6 +98,11 @@ bool Adafruit_LSM9DS0::begin()
98
98
}
99
99
*/
100
100
101
+ // Set default ranges for the various sensors
102
+ setupAccel (LSM9DS0_ACCELRANGE_2G);
103
+ setupMag (LSM9DS0_MAGGAIN_2GAUSS);
104
+ setupGyro (LSM9DS0_GYROSCALE_245DPS);
105
+
101
106
return true ;
102
107
}
103
108
@@ -185,22 +190,91 @@ void Adafruit_LSM9DS0::read()
185
190
temperature = (xlo | (xhi << 8 ));
186
191
}
187
192
193
+ // ToDo: Move to Unified object, but for now convert to SI direct
194
+ accelData.x *= _accel_mg_lsb;
195
+ accelData.y *= _accel_mg_lsb;
196
+ accelData.z *= _accel_mg_lsb;
197
+ magData.x *= _mag_mgauss_lsb;
198
+ magData.y *= _mag_mgauss_lsb;
199
+ magData.z *= _mag_mgauss_lsb;
200
+ gyroData.x *= _gyro_dps_digit;
201
+ gyroData.y *= _gyro_dps_digit;
202
+ gyroData.z *= _gyro_dps_digit;
203
+ temperature /= LSM9DS0_TEMP_LSB_DEGREE_CELSIUS;
204
+
188
205
// ToDo: Calculate orientation
189
206
}
190
207
191
- void Adafruit_LSM9DS0::setupAccel ( lsm9ds0AccelRange_t range, lm9ds0AccelDataRate_t datarate )
208
+ void Adafruit_LSM9DS0::setupAccel ( lsm9ds0AccelRange_t range )
192
209
{
210
+ uint8_t reg = read8 (XMTYPE, LSM9DS0_REGISTER_CTRL_REG2_XM);
211
+ reg &= ~(0b00111000 );
212
+ reg |= range;
213
+ write8 (XMTYPE, LSM9DS0_REGISTER_CTRL_REG2_XM, reg );
193
214
215
+ switch (range)
216
+ {
217
+ case LSM9DS0_ACCELRANGE_2G:
218
+ _accel_mg_lsb = LSM9DS0_ACCEL_MG_LSB_2G;
219
+ break ;
220
+ case LSM9DS0_ACCELRANGE_4G:
221
+ _accel_mg_lsb = LSM9DS0_ACCEL_MG_LSB_4G;
222
+ break ;
223
+ case LSM9DS0_ACCELRANGE_6G:
224
+ _accel_mg_lsb = LSM9DS0_ACCEL_MG_LSB_6G;
225
+ break ;
226
+ case LSM9DS0_ACCELRANGE_8G:
227
+ _accel_mg_lsb = LSM9DS0_ACCEL_MG_LSB_8G;
228
+ break ;
229
+ case LSM9DS0_ACCELRANGE_16G:
230
+ _accel_mg_lsb = LSM9DS0_ACCEL_MG_LSB_16G;
231
+ break ;
232
+ }
194
233
}
195
234
196
- void Adafruit_LSM9DS0::setupMag ( lsm9ds0MagGain_t gain, lsm9ds0MagDataRate_t datarate )
235
+ void Adafruit_LSM9DS0::setupMag ( lsm9ds0MagGain_t gain )
197
236
{
198
-
237
+ uint8_t reg = read8 (XMTYPE, LSM9DS0_REGISTER_CTRL_REG6_XM);
238
+ reg &= ~(0b01100000 );
239
+ reg |= gain;
240
+ write8 (XMTYPE, LSM9DS0_REGISTER_CTRL_REG6_XM, reg );
241
+
242
+ switch (gain)
243
+ {
244
+ case LSM9DS0_MAGGAIN_2GAUSS:
245
+ _mag_mgauss_lsb = LSM9DS0_MAG_MGAUSS_LSB_2GAUSS;
246
+ break ;
247
+ case LSM9DS0_MAGGAIN_4GAUSS:
248
+ _mag_mgauss_lsb = LSM9DS0_MAG_MGAUSS_LSB_4GAUSS;
249
+ break ;
250
+ case LSM9DS0_MAGGAIN_8GAUSS:
251
+ _mag_mgauss_lsb = LSM9DS0_MAG_MGAUSS_LSB_8GAUSS;
252
+ break ;
253
+ case LSM9DS0_MAGGAIN_12GAUSS:
254
+ _mag_mgauss_lsb = LSM9DS0_MAG_MGAUSS_LSB_12GAUSS;
255
+ break ;
256
+ }
199
257
}
200
258
201
259
void Adafruit_LSM9DS0::setupGyro ( lsm9ds0GyroScale_t scale )
202
260
{
203
-
261
+ uint8_t reg = read8 (GYROTYPE, LSM9DS0_REGISTER_CTRL_REG4_G);
262
+ reg &= ~(0b00110000 );
263
+ reg |= scale;
264
+ write8 (GYROTYPE, LSM9DS0_REGISTER_CTRL_REG4_G, reg );
265
+
266
+ switch (scale)
267
+ {
268
+ case LSM9DS0_GYROSCALE_245DPS:
269
+ _gyro_dps_digit = LSM9DS0_GYRO_DPS_DIGIT_245DPS;
270
+ break ;
271
+ case LSM9DS0_GYROSCALE_500DPS:
272
+ _gyro_dps_digit = LSM9DS0_GYRO_DPS_DIGIT_500DPS;
273
+ break ;
274
+ case LSM9DS0_GYROSCALE_2000DPS:
275
+ _gyro_dps_digit = LSM9DS0_GYRO_DPS_DIGIT_2000DPS;
276
+ break ;
277
+ }
204
278
}
205
279
206
280
/* **************************************************************************
0 commit comments