wpi-32u4-library
LSM6.h
Go to the documentation of this file.
1#ifndef LSM6_h
2#define LSM6_h
3
4#include <Arduino.h>
5
9class LSM6
10{
11 public:
12 template <typename T> struct vector
13 {
14 T x, y, z;
15 };
16
19
22 enum ODR
23 {
24 ODR13 = 0x1,
25 ODR26 = 0x2,
26 ODR52 = 0x3,
27 ODR104 = 0x4,
28 ODR208 = 0x5,
29 ODR416 = 0x6,
30 ODR833 = 0x7,
31 ODR166k = 0x8
32 };
33
34 // register addresses
36 {
38
39 FIFO_CTRL1 = 0x06,
40 FIFO_CTRL2 = 0x07,
41 FIFO_CTRL3 = 0x08,
42 FIFO_CTRL4 = 0x09,
43 FIFO_CTRL5 = 0x0A,
45
46 INT1_CTRL = 0x0D,
47 INT2_CTRL = 0x0E,
48 WHO_AM_I = 0x0F,
49 CTRL1_XL = 0x10,
50 CTRL2_G = 0x11,
51 CTRL3_C = 0x12,
52 CTRL4_C = 0x13,
53 CTRL5_C = 0x14,
54 CTRL6_C = 0x15,
55 CTRL7_G = 0x16,
56 CTRL8_XL = 0x17,
57 CTRL9_XL = 0x18,
58 CTRL10_C = 0x19,
59
61 TAP_SRC = 0x1C,
62 D6D_SRC = 0x1D,
63 STATUS_REG = 0x1E,
64
65 OUT_TEMP_L = 0x20,
66 OUT_TEMP_H = 0x21,
67 OUTX_L_G = 0x22,
68 OUTX_H_G = 0x23,
69 OUTY_L_G = 0x24,
70 OUTY_H_G = 0x25,
71 OUTZ_L_G = 0x26,
72 OUTZ_H_G = 0x27,
73 OUTX_L_XL = 0x28,
74 OUTX_H_XL = 0x29,
75 OUTY_L_XL = 0x2A,
76 OUTY_H_XL = 0x2B,
77 OUTZ_L_XL = 0x2C,
78 OUTZ_H_XL = 0x2D,
79
89
94
95 FUNC_SRC = 0x53,
96
97 TAP_CFG = 0x58,
98 TAP_THS_6D = 0x59,
99 INT_DUR2 = 0x5A,
102 FREE_FALL = 0x5D,
103 MD1_CFG = 0x5E,
104 MD2_CFG = 0x5F,
105 };
106
107 vector<int16_t> a; // accelerometer readings
108 vector<int16_t> g; // gyro readings
110
111 //conversion factors
112 float mdps = 0;
113 float mg = 0;
114 //float odrGyro = 0;
115
116 uint8_t last_status; // status of last I2C transmission
117
118 LSM6(void);
119
120 bool init(deviceType device = device_auto, sa0State sa0 = sa0_auto);
122
123 void enableDefault(void);
124
125public:
126 void writeReg(uint8_t reg, uint8_t value);
127 uint8_t readReg(uint8_t reg);
128
129 void readAcc(void);
130 void readGyro(void);
131 void read(void);
132
133 void setFullScaleGyro(GYRO_FS gfs);
134 void setFullScaleAcc(ACC_FS afs);
135
138
139 void setTimeout(uint16_t timeout);
140 uint16_t getTimeout(void);
141 bool timeoutOccurred(void);
142
143 uint8_t getStatus(void) {return readReg(LSM6::STATUS_REG);}
144
145 private:
146 deviceType _device; // chip type
147 uint8_t address;
148
149 uint16_t io_timeout;
151
152 int16_t testReg(uint8_t address, regAddr reg);
153};
154
155#endif
Definition: LSM6.h:10
LSM6(void)
Definition: LSM6.cpp:18
int16_t testReg(uint8_t address, regAddr reg)
Definition: LSM6.cpp:316
void setAccDataOutputRate(ODR)
Definition: LSM6.cpp:112
void setFullScaleAcc(ACC_FS afs)
Definition: LSM6.cpp:73
vector< int16_t > g
Definition: LSM6.h:108
uint8_t getStatus(void)
Definition: LSM6.h:143
uint8_t last_status
Definition: LSM6.h:116
uint8_t readReg(uint8_t reg)
Definition: LSM6.cpp:217
uint16_t getTimeout(void)
Definition: LSM6.cpp:41
sa0State
Definition: LSM6.h:18
@ sa0_high
Definition: LSM6.h:18
@ sa0_auto
Definition: LSM6.h:18
@ sa0_low
Definition: LSM6.h:18
void setGyroDataOutputRate(ODR)
Definition: LSM6.cpp:100
void readAcc(void)
Definition: LSM6.cpp:232
float mg
Definition: LSM6.h:113
void writeReg(uint8_t reg, uint8_t value)
Definition: LSM6.cpp:209
deviceType _device
Definition: LSM6.h:146
void enableDefault(void)
Definition: LSM6.cpp:184
void setTimeout(uint16_t timeout)
Definition: LSM6.cpp:36
bool did_timeout
Definition: LSM6.h:150
void read(void)
Definition: LSM6.cpp:300
uint8_t address
Definition: LSM6.h:147
ACC_FS
Definition: LSM6.h:20
@ ACC_FS8
Definition: LSM6.h:20
@ ACC_FS16
Definition: LSM6.h:20
@ ACC_FS4
Definition: LSM6.h:20
@ ACC_FS2
Definition: LSM6.h:20
void readGyro(void)
Definition: LSM6.cpp:264
GYRO_FS
Definition: LSM6.h:21
@ GYRO_FS245
Definition: LSM6.h:21
@ GYRO_FS1000
Definition: LSM6.h:21
@ GYRO_FS2000
Definition: LSM6.h:21
@ GYRO_FS500
Definition: LSM6.h:21
uint16_t io_timeout
Definition: LSM6.h:149
bool timeoutOccurred(void)
Definition: LSM6.cpp:29
float mdps
Definition: LSM6.h:112
regAddr
Definition: LSM6.h:36
@ FREE_FALL
Definition: LSM6.h:102
@ WHO_AM_I
Definition: LSM6.h:48
@ WAKE_UP_SRC
Definition: LSM6.h:60
@ TAP_THS_6D
Definition: LSM6.h:98
@ CTRL8_XL
Definition: LSM6.h:56
@ OUTX_H_XL
Definition: LSM6.h:74
@ MD1_CFG
Definition: LSM6.h:103
@ INT1_CTRL
Definition: LSM6.h:46
@ FIFO_CTRL1
Definition: LSM6.h:39
@ OUTX_H_G
Definition: LSM6.h:68
@ FIFO_DATA_OUT_H
Definition: LSM6.h:85
@ OUTZ_H_G
Definition: LSM6.h:72
@ TIMESTAMP0_REG
Definition: LSM6.h:86
@ TIMESTAMP2_REG
Definition: LSM6.h:88
@ FIFO_STATUS1
Definition: LSM6.h:80
@ INT2_CTRL
Definition: LSM6.h:47
@ OUTY_H_G
Definition: LSM6.h:70
@ OUTZ_L_G
Definition: LSM6.h:71
@ FIFO_STATUS3
Definition: LSM6.h:82
@ STATUS_REG
Definition: LSM6.h:63
@ CTRL2_G
Definition: LSM6.h:50
@ MD2_CFG
Definition: LSM6.h:104
@ OUTX_L_G
Definition: LSM6.h:67
@ OUTZ_H_XL
Definition: LSM6.h:78
@ FUNC_CFG_ACCESS
Definition: LSM6.h:37
@ D6D_SRC
Definition: LSM6.h:62
@ OUTY_L_G
Definition: LSM6.h:69
@ WAKE_UP_THS
Definition: LSM6.h:100
@ OUT_TEMP_H
Definition: LSM6.h:66
@ CTRL1_XL
Definition: LSM6.h:49
@ TAP_SRC
Definition: LSM6.h:61
@ WAKE_UP_DUR
Definition: LSM6.h:101
@ CTRL10_C
Definition: LSM6.h:58
@ STEP_COUNTER_L
Definition: LSM6.h:92
@ FIFO_CTRL4
Definition: LSM6.h:42
@ STEP_TIMESTAMP_H
Definition: LSM6.h:91
@ CTRL5_C
Definition: LSM6.h:53
@ TAP_CFG
Definition: LSM6.h:97
@ TIMESTAMP1_REG
Definition: LSM6.h:87
@ STEP_COUNTER_H
Definition: LSM6.h:93
@ OUT_TEMP_L
Definition: LSM6.h:65
@ CTRL6_C
Definition: LSM6.h:54
@ OUTY_H_XL
Definition: LSM6.h:76
@ FIFO_CTRL3
Definition: LSM6.h:41
@ ORIENT_CFG_G
Definition: LSM6.h:44
@ FIFO_STATUS4
Definition: LSM6.h:83
@ FUNC_SRC
Definition: LSM6.h:95
@ CTRL7_G
Definition: LSM6.h:55
@ FIFO_CTRL2
Definition: LSM6.h:40
@ INT_DUR2
Definition: LSM6.h:99
@ CTRL4_C
Definition: LSM6.h:52
@ STEP_TIMESTAMP_L
Definition: LSM6.h:90
@ FIFO_CTRL5
Definition: LSM6.h:43
@ FIFO_DATA_OUT_L
Definition: LSM6.h:84
@ OUTX_L_XL
Definition: LSM6.h:73
@ CTRL9_XL
Definition: LSM6.h:57
@ FIFO_STATUS2
Definition: LSM6.h:81
@ OUTZ_L_XL
Definition: LSM6.h:77
@ CTRL3_C
Definition: LSM6.h:51
@ OUTY_L_XL
Definition: LSM6.h:75
void setFullScaleGyro(GYRO_FS gfs)
Definition: LSM6.cpp:46
ODR
Definition: LSM6.h:23
@ ODR104
Definition: LSM6.h:27
@ ODR26
Definition: LSM6.h:25
@ ODR13
Definition: LSM6.h:24
@ ODR833
Definition: LSM6.h:30
@ ODR208
Definition: LSM6.h:28
@ ODR416
Definition: LSM6.h:29
@ ODR52
Definition: LSM6.h:26
@ ODR166k
Definition: LSM6.h:31
bool init(deviceType device=device_auto, sa0State sa0=sa0_auto)
Definition: LSM6.cpp:125
deviceType getDeviceType(void)
Definition: LSM6.h:121
vector< int16_t > a
Definition: LSM6.h:107
deviceType
Definition: LSM6.h:17
@ device_DS33
Definition: LSM6.h:17
@ device_auto
Definition: LSM6.h:17
vector< float > dps
Definition: LSM6.h:109