Skip to content

Commit 6f9a682

Browse files
author
microbuilder
committed
Added temp output
1 parent c681e13 commit 6f9a682

File tree

3 files changed

+50
-13
lines changed

3 files changed

+50
-13
lines changed

Adafruit_LSM9DS0.cpp

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,25 +68,27 @@ bool Adafruit_LSM9DS0::begin()
6868
}
6969

7070
uint8_t id = read8(XMTYPE, LSM9DS0_REGISTER_WHO_AM_I_XM);
71-
Serial.print ("XM whoami: 0x");
72-
Serial.println(id, HEX);
71+
// Serial.print ("XM whoami: 0x");
72+
// Serial.println(id, HEX);
7373
if (id != LSM9DS0_XM_ID)
7474
return false;
7575

7676
id = read8(GYROTYPE, LSM9DS0_REGISTER_WHO_AM_I_G);
77-
Serial.print ("G whoami: 0x");
78-
Serial.println(id, HEX);
77+
// Serial.print ("G whoami: 0x");
78+
// Serial.println(id, HEX);
7979
if (id != LSM9DS0_G_ID)
8080
return false;
8181

82-
8382
// Enable the accelerometer continous
8483
write8(XMTYPE, LSM9DS0_REGISTER_CTRL_REG1_XM, 0x67); // 100hz XYZ
8584
write8(XMTYPE, LSM9DS0_REGISTER_CTRL_REG5_XM, 0b11110000);
8685
// enable mag continuous
8786
write8(XMTYPE, LSM9DS0_REGISTER_CTRL_REG7_XM, 0b00000000);
8887
// enable gyro continuous
8988
write8(GYROTYPE, LSM9DS0_REGISTER_CTRL_REG1_G, 0x0F); // on XYZ
89+
// enable the temperature sensor (output rate same as the mag sensor)
90+
uint8_t tempReg = read8(XMTYPE, LSM9DS0_REGISTER_CTRL_REG5_XM);
91+
write8(XMTYPE, LSM9DS0_REGISTER_CTRL_REG5_XM, tempReg | (1<<7));
9092

9193
/*
9294
for (uint8_t i=0; i<0x30; i++) {
@@ -166,6 +168,21 @@ void Adafruit_LSM9DS0::read()
166168
gyroData.x = (xlo | (xhi << 8));
167169
gyroData.y = (ylo | (yhi << 8));
168170
gyroData.z = (zlo | (zhi << 8));
171+
172+
// Read temp sensor
173+
Wire.beginTransmission((byte)LSM9DS0_ADDRESS_ACCELMAG);
174+
Wire.write(0x80 | LSM9DS0_REGISTER_TEMP_OUT_L_XM);
175+
Wire.endTransmission();
176+
Wire.requestFrom((byte)LSM9DS0_ADDRESS_ACCELMAG, (byte)2);
177+
178+
// Wait around until enough data is available
179+
while (Wire.available() < 2);
180+
181+
xlo = Wire.read();
182+
xhi = Wire.read();
183+
184+
// Shift values to create properly formed integer (low byte first)
185+
temperature = (xlo | (xhi << 8));
169186
}
170187

171188
// ToDo: Calculate orientation

Adafruit_LSM9DS0.h

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,29 @@
2828
#define LSM9DS0_XM_ID (0b01001001)
2929
#define LSM9DS0_G_ID (0b11010100)
3030

31-
#define GYROTYPE true
32-
#define XMTYPE false
31+
// Linear Acceleration: mg per LSB
32+
#define LSM9DS0_ACCEL_MG_LSB_2G (0.061F)
33+
#define LSM9DS0_ACCEL_MG_LSB_4G (0.122F)
34+
#define LSM9DS0_ACCEL_MG_LSB_6G (0.183F)
35+
#define LSM9DS0_ACCEL_MG_LSB_8G (0.244F)
36+
#define LSM9DS0_ACCEL_MG_LSB_16G (0.732F) // Is this right? Was expecting 0.488F
37+
38+
// Magnetic Field Strength: mgauss per LSB
39+
#define LSM9DS0_MAG_MGAUSS_LSB_2GAUSS (0.08F)
40+
#define LSM9DS0_MAG_MGAUSS_LSB_4GAUSS (0.16F)
41+
#define LSM9DS0_MAG_MGAUSS_LSB_8GAUSS (0.32F)
42+
#define LSM9DS0_MAG_MGAUSS_LSB_12GAUSS (0.48F)
43+
44+
// Angular Rate: dps per LSB
45+
#define LSM9DS0_GYRO_DPS_DIGIT_245DPS (0.00875F)
46+
#define LSM9DS0_GYRO_DPS_DIGIT_500DPS (0.01750F)
47+
#define LSM9DS0_GYRO_DPS_DIGIT_2000DPS (0.07000F)
48+
49+
// Temperature: LSB per degree celsius
50+
#define LSM9DS0_TEMP_LSB_DEGREE_CELSIUS (8) // 1°C = 8, 25° = 200, etc.
51+
52+
#define GYROTYPE (true)
53+
#define XMTYPE (false)
3354

3455
class Adafruit_LSM9DS0
3556
{
@@ -135,7 +156,7 @@ class Adafruit_LSM9DS0
135156
lsm9ds0Vector_t accelData; // Last read accelerometer data will be available here
136157
lsm9ds0Vector_t magData; // Last read magnetometer data will be available here
137158
lsm9ds0Vector_t gyroData; // Last read gyroscope data will be available here
138-
float temperature; // Last read temperzture data will be available here
159+
int16_t temperature; // Last read temperzture data will be available here
139160

140161
bool begin ( void );
141162
void read ( void );

examples/lsm9doftest/lsm9doftest.ino

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ void setup()
2626

2727
void loop()
2828
{
29-
30-
3129
lsm.read();
3230

3331
Serial.print("Accel X: "); Serial.print((int)lsm.accelData.x); Serial.print(" ");
@@ -36,8 +34,9 @@ void loop()
3634
Serial.print("Mag X: "); Serial.print((int)lsm.magData.x); Serial.print(" ");
3735
Serial.print("Y: "); Serial.print((int)lsm.magData.y); Serial.print(" ");
3836
Serial.print("Z: "); Serial.println((int)lsm.magData.z); Serial.print(" ");
39-
Serial.print("Gyro X: "); Serial.print((int)lsm.gyroData.x); Serial.print(" ");
40-
Serial.print("Y: "); Serial.print((int)lsm.gyroData.y); Serial.print(" ");
41-
Serial.print("Z: "); Serial.println((int)lsm.gyroData.z); Serial.println(" ");
37+
Serial.print("Gyro X: "); Serial.print((int)lsm.gyroData.x); Serial.print(" ");
38+
Serial.print("Y: "); Serial.print((int)lsm.gyroData.y); Serial.print(" ");
39+
Serial.print("Z: "); Serial.println((int)lsm.gyroData.z); Serial.println(" ");
40+
Serial.print("Temp: "); Serial.print((int)lsm.temperature); Serial.print("/0x"); Serial.print((int)lsm.temperature, HEX); Serial.println(" ");
4241
delay(200);
4342
}

0 commit comments

Comments
 (0)