23
23
#include " Wire.h"
24
24
#include < SPI.h>
25
25
26
- #define LSM9DS0_ADDRESS_ACCELMAG 0x1D // 3B >> 1 = 7bit default
27
- #define LSM9DS0_ADDRESS_GYRO 0x6B // D6 >> 1 = 7bit default
28
- #define LSM9DS0_XM_ID (0b01001001 )
29
- #define LSM9DS0_G_ID (0b11010100 )
26
+ #define LSM9DS0_ADDRESS_ACCELMAG ( 0x1D ) // 3B >> 1 = 7bit default
27
+ #define LSM9DS0_ADDRESS_GYRO ( 0x6B ) // D6 >> 1 = 7bit default
28
+ #define LSM9DS0_XM_ID (0b01001001 )
29
+ #define LSM9DS0_G_ID (0b11010100 )
30
30
31
-
32
- #define GYROTYPE true
33
- #define XMTYPE false
31
+ #define GYROTYPE true
32
+ #define XMTYPE false
34
33
35
34
class Adafruit_LSM9DS0
36
35
{
37
36
public:
38
- Adafruit_LSM9DS0 ();
39
- Adafruit_LSM9DS0 (int8_t xmcs, int8_t gcs);
40
- Adafruit_LSM9DS0 (int8_t clk, int8_t miso, int8_t mosi, int8_t xmcs, int8_t gcs);
41
-
42
- typedef enum
43
- { // DEFAULT TYPE
44
- LSM9DS0_REGISTER_WHO_AM_I_G = 0x0F ,
45
- LSM9DS0_REGISTER_CTRL_REG1_G = 0x20 ,
46
- LSM9DS0_REGISTER_CTRL_REG3_G = 0x22 ,
47
-
37
+ Adafruit_LSM9DS0 ();
38
+ Adafruit_LSM9DS0 (int8_t xmcs, int8_t gcs);
39
+ Adafruit_LSM9DS0 (int8_t clk, int8_t miso, int8_t mosi, int8_t xmcs, int8_t gcs);
48
40
49
- LSM9DS0_REGISTER_OUT_X_L_G = 0x28 ,
50
- LSM9DS0_REGISTER_OUT_X_H_G = 0x29 ,
51
- LSM9DS0_REGISTER_OUT_Y_L_G = 0x2A ,
52
- LSM9DS0_REGISTER_OUT_Y_H_G = 0x2B ,
53
- LSM9DS0_REGISTER_OUT_Z_L_G = 0x2C ,
54
- LSM9DS0_REGISTER_OUT_Z_H_G = 0x2D ,
41
+ typedef enum
42
+ {
43
+ LSM9DS0_REGISTER_WHO_AM_I_G = 0x0F ,
44
+ LSM9DS0_REGISTER_CTRL_REG1_G = 0x20 ,
45
+ LSM9DS0_REGISTER_CTRL_REG3_G = 0x22 ,
46
+ LSM9DS0_REGISTER_OUT_X_L_G = 0x28 ,
47
+ LSM9DS0_REGISTER_OUT_X_H_G = 0x29 ,
48
+ LSM9DS0_REGISTER_OUT_Y_L_G = 0x2A ,
49
+ LSM9DS0_REGISTER_OUT_Y_H_G = 0x2B ,
50
+ LSM9DS0_REGISTER_OUT_Z_L_G = 0x2C ,
51
+ LSM9DS0_REGISTER_OUT_Z_H_G = 0x2D ,
55
52
} lsm9ds0GyroRegisters_t;
56
-
53
+
57
54
typedef enum
58
- { // DEFAULT TYPE
59
- LSM9DS0_REGISTER_TEMP_OUT_L_XM = 0x05 ,
60
- LSM9DS0_REGISTER_TEMP_OUT_H_XM = 0x06 ,
61
- LSM9DS0_REGISTER_STATUS_REG_M = 0x07 ,
62
- LSM9DS0_REGISTER_OUT_X_L_M = 0x08 ,
63
- LSM9DS0_REGISTER_OUT_X_H_M = 0x09 ,
64
- LSM9DS0_REGISTER_OUT_Y_L_M = 0x0A ,
65
- LSM9DS0_REGISTER_OUT_Y_H_M = 0x0B ,
66
- LSM9DS0_REGISTER_OUT_Z_L_M = 0x0C ,
67
- LSM9DS0_REGISTER_OUT_Z_H_M = 0x0D ,
68
-
69
- LSM9DS0_REGISTER_WHO_AM_I_XM = 0x0F ,
70
-
71
- LSM9DS0_REGISTER_INT_CTRL_REG_M = 0x12 ,
72
- LSM9DS0_REGISTER_INT_SRC_REG_M = 0x13 ,
73
-
74
- LSM9DS0_REGISTER_CTRL_REG1_XM = 0x20 ,
75
- LSM9DS0_REGISTER_CTRL_REG5_XM = 0x24 ,
76
- LSM9DS0_REGISTER_CTRL_REG7_XM = 0x26 ,
77
-
55
+ {
56
+ LSM9DS0_REGISTER_TEMP_OUT_L_XM = 0x05 ,
57
+ LSM9DS0_REGISTER_TEMP_OUT_H_XM = 0x06 ,
58
+ LSM9DS0_REGISTER_STATUS_REG_M = 0x07 ,
59
+ LSM9DS0_REGISTER_OUT_X_L_M = 0x08 ,
60
+ LSM9DS0_REGISTER_OUT_X_H_M = 0x09 ,
61
+ LSM9DS0_REGISTER_OUT_Y_L_M = 0x0A ,
62
+ LSM9DS0_REGISTER_OUT_Y_H_M = 0x0B ,
63
+ LSM9DS0_REGISTER_OUT_Z_L_M = 0x0C ,
64
+ LSM9DS0_REGISTER_OUT_Z_H_M = 0x0D ,
65
+ LSM9DS0_REGISTER_WHO_AM_I_XM = 0x0F ,
66
+ LSM9DS0_REGISTER_INT_CTRL_REG_M = 0x12 ,
67
+ LSM9DS0_REGISTER_INT_SRC_REG_M = 0x13 ,
68
+ LSM9DS0_REGISTER_CTRL_REG1_XM = 0x20 ,
69
+ LSM9DS0_REGISTER_CTRL_REG5_XM = 0x24 ,
70
+ LSM9DS0_REGISTER_CTRL_REG7_XM = 0x26 ,
78
71
LSM9DS0_REGISTER_OUT_X_L_A = 0x28 ,
79
72
LSM9DS0_REGISTER_OUT_X_H_A = 0x29 ,
80
73
LSM9DS0_REGISTER_OUT_Y_L_A = 0x2A ,
81
74
LSM9DS0_REGISTER_OUT_Y_H_A = 0x2B ,
82
75
LSM9DS0_REGISTER_OUT_Z_L_A = 0x2C ,
83
76
LSM9DS0_REGISTER_OUT_Z_H_A = 0x2D ,
84
-
85
- /*
86
- LSM9DS0_REGISTER_ACCEL_CTRL_REG1_A = 0x20, // 00000111 rw
87
- LSM9DS0_REGISTER_ACCEL_CTRL_REG2_A = 0x21, // 00000000 rw
88
- LSM9DS0_REGISTER_ACCEL_CTRL_REG3_A = 0x22, // 00000000 rw
89
- LSM9DS0_REGISTER_ACCEL_CTRL_REG4_A = 0x23, // 00000000 rw
90
- LSM9DS0_REGISTER_ACCEL_CTRL_REG5_A = 0x24, // 00000000 rw
91
- LSM9DS0_REGISTER_ACCEL_CTRL_REG6_A = 0x25, // 00000000 rw
92
- LSM9DS0_REGISTER_ACCEL_REFERENCE_A = 0x26, // 00000000 r
93
- LSM9DS0_REGISTER_ACCEL_STATUS_REG_A = 0x27, // 00000000 r
94
- LSM9DS0_REGISTER_ACCEL_FIFO_CTRL_REG_A = 0x2E,
95
- LSM9DS0_REGISTER_ACCEL_FIFO_SRC_REG_A = 0x2F,
96
- LSM9DS0_REGISTER_ACCEL_INT1_CFG_A = 0x30,
97
- LSM9DS0_REGISTER_ACCEL_INT1_SOURCE_A = 0x31,
98
- LSM9DS0_REGISTER_ACCEL_INT1_THS_A = 0x32,
99
- LSM9DS0_REGISTER_ACCEL_INT1_DURATION_A = 0x33,
100
- LSM9DS0_REGISTER_ACCEL_INT2_CFG_A = 0x34,
101
- LSM9DS0_REGISTER_ACCEL_INT2_SOURCE_A = 0x35,
102
- LSM9DS0_REGISTER_ACCEL_INT2_THS_A = 0x36,
103
- LSM9DS0_REGISTER_ACCEL_INT2_DURATION_A = 0x37,
104
- LSM9DS0_REGISTER_ACCEL_CLICK_CFG_A = 0x38,
105
- LSM9DS0_REGISTER_ACCEL_CLICK_SRC_A = 0x39,
106
- LSM9DS0_REGISTER_ACCEL_CLICK_THS_A = 0x3A,
107
- LSM9DS0_REGISTER_ACCEL_TIME_LIMIT_A = 0x3B,
108
- LSM9DS0_REGISTER_ACCEL_TIME_LATENCY_A = 0x3C,
109
- LSM9DS0_REGISTER_ACCEL_TIME_WINDOW_A = 0x3D
110
-
111
-
112
- LSM9DS0_REGISTER_MAG_CRB_REG_M = 0x01,
113
- LSM9DS0_REGISTER_MAG_MR_REG_M = 0x02,
114
-
115
- LSM9DS0_REGISTER_MAG_SR_REG_Mg = 0x09,
116
- LSM9DS0_REGISTER_MAG_IRA_REG_M = 0x0A,
117
- LSM9DS0_REGISTER_MAG_IRB_REG_M = 0x0B,
118
- LSM9DS0_REGISTER_MAG_IRC_REG_M = 0x0C,
119
- */
120
77
} lsm9ds0MagAccelRegisters_t;
121
-
122
78
123
79
typedef enum
124
- {
125
- /*
126
- LSM9DS0_MAGGAIN_1_3 = 0x20, // +/- 1.3
127
- LSM9DS0_MAGGAIN_1_9 = 0x40, // +/- 1.9
128
- LSM9DS0_MAGGAIN_2_5 = 0x60, // +/- 2.5
129
- LSM9DS0_MAGGAIN_4_0 = 0x80, // +/- 4.0
130
- LSM9DS0_MAGGAIN_4_7 = 0xA0, // +/- 4.7
131
- LSM9DS0_MAGGAIN_5_6 = 0xC0, // +/- 5.6
132
- LSM9DS0_MAGGAIN_8_1 = 0xE0 // +/- 8.1
133
- */
134
- } lsm9ds0MagGain;
80
+ {
81
+ /*
82
+ LSM9DS0_MAGGAIN_1_3 = 0x20, // +/- 1.3
83
+ LSM9DS0_MAGGAIN_1_9 = 0x40, // +/- 1.9
84
+ LSM9DS0_MAGGAIN_2_5 = 0x60, // +/- 2.5
85
+ LSM9DS0_MAGGAIN_4_0 = 0x80, // +/- 4.0
86
+ LSM9DS0_MAGGAIN_4_7 = 0xA0, // +/- 4.7
87
+ LSM9DS0_MAGGAIN_5_6 = 0xC0, // +/- 5.6
88
+ LSM9DS0_MAGGAIN_8_1 = 0xE0 // +/- 8.1
89
+ */
90
+ } lsm9ds0MagGain;
135
91
136
92
typedef struct lsm9ds0AccelData_s
137
93
{
@@ -154,23 +110,22 @@ class Adafruit_LSM9DS0
154
110
float z;
155
111
float orientation;
156
112
} lsm9ds0MagData;
157
-
158
- bool begin (void );
159
- void read (void );
160
- void setMagGain (lsm9ds0MagGain gain);
161
-
113
+
162
114
lsm9ds0AccelData accelData; // Last read accelerometer data will be available here
163
- lsm9ds0MagData magData; // Last read magnetometer data will be available here
164
- lsm9ds0GyroData gyroData; // Last read gyroscope data will be available here
165
- void write8 (boolean type, byte reg, byte value);
166
- byte read8 (boolean type, byte reg);
167
- uint8_t spixfer (uint8_t data);
115
+ lsm9ds0MagData magData; // Last read magnetometer data will be available here
116
+ lsm9ds0GyroData gyroData; // Last read gyroscope data will be available here
117
+
118
+ bool begin ( void );
119
+ void read ( void );
120
+ void setMagGain ( lsm9ds0MagGain gain );
121
+ void write8 ( boolean type, byte reg, byte value );
122
+ byte read8 ( boolean type, byte reg );
123
+ uint8_t spixfer ( uint8_t data );
168
124
169
125
private:
170
126
boolean _i2c;
171
- int8_t _csg, _csxm, _mosi, _miso, _clk;
127
+ int8_t _csg, _csxm, _mosi, _miso, _clk;
172
128
uint8_t mySPCR, SPCRback;
173
129
};
174
130
175
-
176
131
#endif
0 commit comments