forked from adafruit/Adafruit_ADXL345
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Adafruit_ADXL345_U.h
134 lines (117 loc) · 6.21 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
/**************************************************************************/
/*!
@file Adafruit_ADS1015.h
@author K. Townsend (Adafruit Industries)
@license BSD (see license.txt)
This is a library for the Adafruit ADS1015 breakout board
----> https://www.adafruit.com/products/???
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
@section HISTORY
v1.0 - First release
*/
/**************************************************************************/
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include <Adafruit_Sensor.h>
#include <Wire.h>
/*=========================================================================
I2C ADDRESS/BITS
-----------------------------------------------------------------------*/
#define ADXL345_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
/*=========================================================================*/
/* 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;
/* 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;
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);
bool begin(void);
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:
inline uint8_t i2cread(void);
inline void i2cwrite(uint8_t x);
int32_t _sensorID;
range_t _range;
uint8_t _clk, _do, _di, _cs;
bool _i2c;
};