Adafruit MSA301 Sensor Library
Adafruit_MSA301.h
Go to the documentation of this file.
1 
5 #ifndef ADAFRUIT_MSA301_H
6 #define ADAFRUIT_MSA301_H
7 
8 #include <Adafruit_BusIO_Register.h>
9 #include <Adafruit_I2CDevice.h>
10 #include <Adafruit_Sensor.h>
11 #include <Wire.h>
12 
13 /*=========================================================================
14 I2C ADDRESS/BITS
15 -----------------------------------------------------------------------*/
16 #define MSA301_I2CADDR_DEFAULT (0x26)
17 #define MSA311_I2CADDR_DEFAULT (0x62)
18 /*=========================================================================*/
19 
20 #define MSA301_REG_PARTID 0x01
21 #define MSA301_REG_OUT_X_L 0x02
22 #define MSA301_REG_OUT_X_H 0x03
23 #define MSA301_REG_OUT_Y_L 0x04
24 #define MSA301_REG_OUT_Y_H 0x05
25 #define MSA301_REG_OUT_Z_L 0x06
26 #define MSA301_REG_OUT_Z_H 0x07
27 #define MSA301_REG_MOTIONINT 0x09
28 #define MSA301_REG_DATAINT 0x0A
29 #define MSA301_REG_CLICKSTATUS \
30  0x0B
31 #define MSA301_REG_RESRANGE 0x0F
32 #define MSA301_REG_ODR 0x10
33 #define MSA301_REG_POWERMODE 0x11
34 #define MSA301_REG_INTSET0 0x16
35 #define MSA301_REG_INTSET1 0x17
36 #define MSA301_REG_INTMAP0 0x19
37 #define MSA301_REG_INTMAP1 0x1A
38 #define MSA301_REG_TAPDUR 0x2A
39 #define MSA301_REG_TAPTH 0x2B
40 
41 
42 typedef enum {
48 
50 typedef enum {
51  MSA301_AXIS_X = 0x0,
52  MSA301_AXIS_Y = 0x1,
53  MSA301_AXIS_Z = 0x2,
55 
57 typedef enum {
70 
72 typedef enum {
83 
85 typedef enum {
90 
92 typedef enum {
98 
100 typedef enum {
110 
112 typedef enum {
113  MSA301_INT_ORIENT = 0b100000,
119 
121 class Adafruit_MSA301 : public Adafruit_Sensor {
122 public:
123  Adafruit_MSA301(void);
124  bool begin(uint8_t i2c_addr = MSA301_I2CADDR_DEFAULT, TwoWire *wire = &Wire);
125 
126  void setDataRate(msa301_dataRate_t dataRate);
128  void enableAxes(bool x, bool y, bool z);
129 
130  void setPowerMode(msa301_powermode_t mode);
132  void setBandwidth(msa301_bandwidth_t bandwidth);
134  void setRange(msa301_range_t range);
135  msa301_range_t getRange(void);
136  void setResolution(msa301_resolution_t resolution);
138 
139  void read();
140  bool getEvent(sensors_event_t *event);
141  void getSensor(sensor_t *sensor);
142 
143  void enableInterrupts(bool singletap = false, bool doubletap = false,
144  bool activeX = false, bool activeY = false,
145  bool activeZ = false, bool newData = false,
146  bool freefall = false, bool orient = false);
147  void mapInterruptPin(bool singletap = false, bool doubletap = false,
148  bool activity = false, bool newData = false,
149  bool freefall = false, bool orient = false);
150 
151  uint8_t getClick(void);
152  uint8_t getMotionInterruptStatus(void);
153  uint8_t getDataInterruptStatus(void);
154 
155  void setClick(bool tap_quiet, bool tap_shock,
156  msa301_tapduration_t tapduration, uint8_t tapthresh);
157 
158  /*
159 
160  uint8_t getOrientation(void);
161 
162  */
163 
164  int16_t x,
165  y,
166  z;
167  float x_g,
168  y_g,
169  z_g;
170 
171 private:
172  Adafruit_I2CDevice *i2c_dev;
173 
174  int32_t _sensorID;
175 };
176 
179 public:
180  Adafruit_MSA311(void);
181  bool begin(uint8_t i2c_addr = MSA311_I2CADDR_DEFAULT, TwoWire *wire = &Wire);
182 };
183 
184 #endif
msa301_powermode_t getPowerMode(void)
Get the power mode.
Definition: Adafruit_MSA301.cpp:181
msa301_powermode_t
Definition: Adafruit_MSA301.h:85
3.9 Hz
Definition: Adafruit_MSA301.h:60
uint8_t getClick(void)
Gets the most recent click detect status register value.
Definition: Adafruit_MSA301.cpp:355
float z_g
The last read X acceleration in &#39;g&#39;.
Definition: Adafruit_MSA301.h:167
#define MSA311_I2CADDR_DEFAULT
Fixed I2C address.
Definition: Adafruit_MSA301.h:17
150 millis
Definition: Adafruit_MSA301.h:103
New data interrupt.
Definition: Adafruit_MSA301.h:117
500 Hz
Definition: Adafruit_MSA301.h:67
int16_t x
The last read X acceleration in raw units.
Definition: Adafruit_MSA301.h:164
125 Hz
Definition: Adafruit_MSA301.h:65
Single tap interrupt.
Definition: Adafruit_MSA301.h:114
1000 Hz
Definition: Adafruit_MSA301.h:68
void enableInterrupts(bool singletap=false, bool doubletap=false, bool activeX=false, bool activeY=false, bool activeZ=false, bool newData=false, bool freefall=false, bool orient=false)
Set which interrupts are enabled.
Definition: Adafruit_MSA301.cpp:375
Adafruit_MSA301(void)
Instantiates a new MSA301 class.
Definition: Adafruit_MSA301.cpp:32
void read()
Read the XYZ data from the accelerometer and store in the internal x, y and z (and x_g...
Definition: Adafruit_MSA301.cpp:280
15.63 Hz
Definition: Adafruit_MSA301.h:76
100 millis
Definition: Adafruit_MSA301.h:102
bool getEvent(sensors_event_t *event)
Gets the most recent sensor event, Adafruit Unified Sensor format.
Definition: Adafruit_MSA301.cpp:465
1 Hz
Definition: Adafruit_MSA301.h:58
31.25 Hz
Definition: Adafruit_MSA301.h:63
msa301_dataRate_t getDataRate(void)
Gets the data rate for the MSA301 (controls power consumption)
Definition: Adafruit_MSA301.cpp:130
62.5 Hz
Definition: Adafruit_MSA301.h:64
375 millis
Definition: Adafruit_MSA301.h:106
void setRange(msa301_range_t range)
Set the resolution range: +-2g, 4g, 8g, or 16g.
Definition: Adafruit_MSA301.cpp:223
+/- 8g
Definition: Adafruit_MSA301.h:45
msa301_tapduration_t
Definition: Adafruit_MSA301.h:100
12-bit resolution
Definition: Adafruit_MSA301.h:94
8-bit resolution
Definition: Adafruit_MSA301.h:96
msa301_bandwidth_t
Definition: Adafruit_MSA301.h:72
void getSensor(sensor_t *sensor)
Gets the sensor_t device data, Adafruit Unified Sensor format.
Definition: Adafruit_MSA301.cpp:490
15.63 Hz
Definition: Adafruit_MSA301.h:62
bool begin(uint8_t i2c_addr=MSA301_I2CADDR_DEFAULT, TwoWire *wire=&Wire)
Sets up the hardware and initializes I2C.
Definition: Adafruit_MSA301.cpp:61
125 Hz
Definition: Adafruit_MSA301.h:79
500 millis
Definition: Adafruit_MSA301.h:107
void setClick(bool tap_quiet, bool tap_shock, msa301_tapduration_t tapduration, uint8_t tapthresh)
Set the click detection register thresholds.
Definition: Adafruit_MSA301.cpp:326
void setBandwidth(msa301_bandwidth_t bandwidth)
Set the bandwidth, ranges from 1.95Hz to 500Hz.
Definition: Adafruit_MSA301.cpp:195
msa301_resolution_t getResolution(void)
Read the resolution - 8, 10, 12, or 14bits.
Definition: Adafruit_MSA301.cpp:265
Z axis bit.
Definition: Adafruit_MSA301.h:53
3.9 Hz
Definition: Adafruit_MSA301.h:74
Suspend (sleep) mode.
Definition: Adafruit_MSA301.h:88
Y axis bit.
Definition: Adafruit_MSA301.h:52
1.95 Hz
Definition: Adafruit_MSA301.h:73
Low power (slow speed) mode.
Definition: Adafruit_MSA301.h:87
7.81 Hz
Definition: Adafruit_MSA301.h:61
50 millis
Definition: Adafruit_MSA301.h:101
250 millis
Definition: Adafruit_MSA301.h:105
float y_g
The last read Y acceleration in &#39;g&#39;.
Definition: Adafruit_MSA301.h:167
void setPowerMode(msa301_powermode_t mode)
Set the power mode, MSA301_NORMALMODE, MSA301_LOWPOWERMODE or MSA301_SUSPENDMODE. ...
Definition: Adafruit_MSA301.cpp:165
void setDataRate(msa301_dataRate_t dataRate)
Sets the data rate for the MSA301 (controls power consumption) from 1 Hz to 1000Hz.
Definition: Adafruit_MSA301.cpp:116
+/- 2g (default value)
Definition: Adafruit_MSA301.h:43
7.81 Hz
Definition: Adafruit_MSA301.h:75
X axis bit.
Definition: Adafruit_MSA301.h:51
Definition: Adafruit_MSA301.h:121
void setResolution(msa301_resolution_t resolution)
Set the resolution - 8, 10, 12, or 14bits.
Definition: Adafruit_MSA301.cpp:251
msa301_bandwidth_t getBandwidth(void)
Get the bandwidth.
Definition: Adafruit_MSA301.cpp:209
int16_t y
The last read Y acceleration in raw units.
Definition: Adafruit_MSA301.h:164
1.95 Hz
Definition: Adafruit_MSA301.h:59
31.25 Hz
Definition: Adafruit_MSA301.h:77
msa301_dataRate_t
Definition: Adafruit_MSA301.h:57
Double tap interrupt.
Definition: Adafruit_MSA301.h:115
Normal (high speed) mode.
Definition: Adafruit_MSA301.h:86
200 millis
Definition: Adafruit_MSA301.h:104
void enableAxes(bool x, bool y, bool z)
What axes of the accelerometer we want enabled for reading.
Definition: Adafruit_MSA301.cpp:146
msa301_range_t
Definition: Adafruit_MSA301.h:42
Definition: Adafruit_MSA301.h:178
msa301_axis_t
Definition: Adafruit_MSA301.h:50
void mapInterruptPin(bool singletap=false, bool doubletap=false, bool activity=false, bool newData=false, bool freefall=false, bool orient=false)
Set which interrupts are mapped to the INT pin.
Definition: Adafruit_MSA301.cpp:409
msa301_interrupt_t
Definition: Adafruit_MSA301.h:112
10-bit resolution
Definition: Adafruit_MSA301.h:95
Orientation change interrupt.
Definition: Adafruit_MSA301.h:113
250 Hz
Definition: Adafruit_MSA301.h:66
int16_t z
The last read Z acceleration in raw units.
Definition: Adafruit_MSA301.h:164
500 Hz
Definition: Adafruit_MSA301.h:81
+/- 4g
Definition: Adafruit_MSA301.h:44
62.5 Hz
Definition: Adafruit_MSA301.h:78
msa301_range_t getRange(void)
Read the resolution range: +-2g, 4g, 8g, or 16g.
Definition: Adafruit_MSA301.cpp:237
msa301_resolution_t
Definition: Adafruit_MSA301.h:92
+/- 16g
Definition: Adafruit_MSA301.h:46
Active motion interrupt.
Definition: Adafruit_MSA301.h:116
uint8_t getMotionInterruptStatus(void)
Gets the most recent motion interrupt status register value.
Definition: Adafruit_MSA301.cpp:435
250 Hz
Definition: Adafruit_MSA301.h:80
float x_g
The last read X acceleration in &#39;g&#39;.
Definition: Adafruit_MSA301.h:167
uint8_t getDataInterruptStatus(void)
Gets the most recent data interrupt status register value.
Definition: Adafruit_MSA301.cpp:450
50 millis700 millis
Definition: Adafruit_MSA301.h:108
#define MSA301_I2CADDR_DEFAULT
Fixed I2C address.
Definition: Adafruit_MSA301.h:16
14-bit resolution
Definition: Adafruit_MSA301.h:93