-
Notifications
You must be signed in to change notification settings - Fork 111
/
Adafruit_ADXL345_U.h
157 lines (134 loc) · 6.39 KB
/
Adafruit_ADXL345_U.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/**************************************************************************/
/*!
@file Adafruit_ADXL345_U.h
@author K. Townsend (Adafruit Industries)
The ADXL345 is a digital accelerometer with 13-bit resolution, capable
of measuring up to +/-16g. This driver communicate using I2C.
This is a library for the Adafruit ADXL345 breakout
----> https://www.adafruit.com/products/1231
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
@section license License
BSD (see license.txt)
@section HISTORY
v1.1 - Added Adafruit_Sensor library support
v1.0 - First release
*/
/**************************************************************************/
#ifndef Adafruit_ADXL345_h
#define Adafruit_ADXL345_h
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include <Adafruit_I2CDevice.h>
#include <Adafruit_SPIDevice.h>
#include <Adafruit_Sensor.h>
/*=========================================================================
I2C ADDRESS/BITS
-----------------------------------------------------------------------*/
#define ADXL345_DEFAULT_ADDRESS (0x53) ///< Assumes ALT address pin low
/*=========================================================================*/
/*=========================================================================
REGISTERS
-----------------------------------------------------------------------*/
#define ADXL345_REG_DEVID (0x00) ///< Device ID
#define ADXL345_REG_THRESH_TAP (0x1D) ///< Tap threshold
#define ADXL345_REG_OFSX (0x1E) ///< X-axis offset
#define ADXL345_REG_OFSY (0x1F) ///< Y-axis offset
#define ADXL345_REG_OFSZ (0x20) ///< Z-axis offset
#define ADXL345_REG_DUR (0x21) ///< Tap duration
#define ADXL345_REG_LATENT (0x22) ///< Tap latency
#define ADXL345_REG_WINDOW (0x23) ///< Tap window
#define ADXL345_REG_THRESH_ACT (0x24) ///< Activity threshold
#define ADXL345_REG_THRESH_INACT (0x25) ///< Inactivity threshold
#define ADXL345_REG_TIME_INACT (0x26) ///< Inactivity time
#define ADXL345_REG_ACT_INACT_CTL \
(0x27) ///< Axis enable control for activity and inactivity detection
#define ADXL345_REG_THRESH_FF (0x28) ///< Free-fall threshold
#define ADXL345_REG_TIME_FF (0x29) ///< Free-fall time
#define ADXL345_REG_TAP_AXES (0x2A) ///< Axis control for single/double tap
#define ADXL345_REG_ACT_TAP_STATUS (0x2B) ///< Source for single/double tap
#define ADXL345_REG_BW_RATE (0x2C) ///< Data rate and power mode control
#define ADXL345_REG_POWER_CTL (0x2D) ///< Power-saving features control
#define ADXL345_REG_INT_ENABLE (0x2E) ///< Interrupt enable control
#define ADXL345_REG_INT_MAP (0x2F) ///< Interrupt mapping control
#define ADXL345_REG_INT_SOURCE (0x30) ///< Source of interrupts
#define ADXL345_REG_DATA_FORMAT (0x31) ///< Data format control
#define ADXL345_REG_DATAX0 (0x32) ///< X-axis data 0
#define ADXL345_REG_DATAX1 (0x33) ///< X-axis data 1
#define ADXL345_REG_DATAY0 (0x34) ///< Y-axis data 0
#define ADXL345_REG_DATAY1 (0x35) ///< Y-axis data 1
#define ADXL345_REG_DATAZ0 (0x36) ///< Z-axis data 0
#define ADXL345_REG_DATAZ1 (0x37) ///< Z-axis data 1
#define ADXL345_REG_FIFO_CTL (0x38) ///< FIFO control
#define ADXL345_REG_FIFO_STATUS (0x39) ///< FIFO status
/*=========================================================================*/
/*=========================================================================
REGISTERS
-----------------------------------------------------------------------*/
#define ADXL345_MG2G_MULTIPLIER (0.004) ///< 4mg per lsb
/*=========================================================================*/
/**
* @brief Used with register 0x2C (ADXL345_REG_BW_RATE) to set bandwidth
*/
typedef enum {
ADXL345_DATARATE_3200_HZ = 0b1111, ///< 1600Hz Bandwidth 140�A IDD
ADXL345_DATARATE_1600_HZ = 0b1110, ///< 800Hz Bandwidth 90�A IDD
ADXL345_DATARATE_800_HZ = 0b1101, ///< 400Hz Bandwidth 140�A IDD
ADXL345_DATARATE_400_HZ = 0b1100, ///< 200Hz Bandwidth 140�A IDD
ADXL345_DATARATE_200_HZ = 0b1011, ///< 100Hz Bandwidth 140�A IDD
ADXL345_DATARATE_100_HZ = 0b1010, ///< 50Hz Bandwidth 140�A IDD
ADXL345_DATARATE_50_HZ = 0b1001, ///< 25Hz Bandwidth 90�A IDD
ADXL345_DATARATE_25_HZ = 0b1000, ///< 12.5Hz Bandwidth 60�A IDD
ADXL345_DATARATE_12_5_HZ = 0b0111, ///< 6.25Hz Bandwidth 50�A IDD
ADXL345_DATARATE_6_25HZ = 0b0110, ///< 3.13Hz Bandwidth 45�A IDD
ADXL345_DATARATE_3_13_HZ = 0b0101, ///< 1.56Hz Bandwidth 40�A IDD
ADXL345_DATARATE_1_56_HZ = 0b0100, ///< 0.78Hz Bandwidth 34�A IDD
ADXL345_DATARATE_0_78_HZ = 0b0011, ///< 0.39Hz Bandwidth 23�A IDD
ADXL345_DATARATE_0_39_HZ = 0b0010, ///< 0.20Hz Bandwidth 23�A IDD
ADXL345_DATARATE_0_20_HZ = 0b0001, ///< 0.10Hz Bandwidth 23�A IDD
ADXL345_DATARATE_0_10_HZ =
0b0000 ///< 0.05Hz Bandwidth 23�A IDD (default value)
} dataRate_t;
/**
* @brief Used with register 0x31 (ADXL345_REG_DATA_FORMAT) to set g range
*
*/
typedef enum {
ADXL345_RANGE_16_G = 0b11, ///< +/- 16g
ADXL345_RANGE_8_G = 0b10, ///< +/- 8g
ADXL345_RANGE_4_G = 0b01, ///< +/- 4g
ADXL345_RANGE_2_G = 0b00 ///< +/- 2g (default value)
} range_t;
/**
* @brief Class to interact with the ADXL345 accelerometer
*
*/
class Adafruit_ADXL345_Unified : public Adafruit_Sensor {
public:
Adafruit_ADXL345_Unified(int32_t sensorID = -1);
Adafruit_ADXL345_Unified(uint8_t clock, uint8_t miso, uint8_t mosi,
uint8_t cs, int32_t sensorID = -1);
~Adafruit_ADXL345_Unified();
bool begin(uint8_t addr = ADXL345_DEFAULT_ADDRESS);
void setRange(range_t range);
range_t getRange(void);
void setDataRate(dataRate_t dataRate);
dataRate_t getDataRate(void);
bool getEvent(sensors_event_t *);
void getSensor(sensor_t *);
uint8_t getDeviceID(void);
void writeRegister(uint8_t reg, uint8_t value);
uint8_t readRegister(uint8_t reg);
int16_t read16(uint8_t reg);
int16_t getX(void), getY(void), getZ(void);
private:
Adafruit_I2CDevice *i2c_dev = NULL; ///< Pointer to I2C bus interface
Adafruit_SPIDevice *spi_dev = NULL; ///< Pointer to SPI bus interface
int32_t _sensorID;
range_t _range;
};
#endif // Adafruit_ADXL345_h