-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathADXL345.hpp
130 lines (102 loc) · 2.24 KB
/
ADXL345.hpp
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
#ifndef ADXL345_HPP_
#define ADXL345_HPP_
#include <string>
#include <stddef.h>
#include <stdint.h>
#define DEVADDR 0x53
enum PowerMode {
NormalPower = 0x0,
LowPower = 0x1<<4,
};
enum Scale {
Scale_2G = 0x0,
Scale_4G = 0x1,
Scale_8G = 0x2,
Scale_16G = 0x3,
Scale_FullRes = 0xB
};
enum FIFOMode {
Bypass = 0x0,
FIFO = 0x1,
Stream = 0x2,
Trigger = 0x3
};
enum {
DEVID = 0x00,
OFSX = 0x1e,
OFSY = 0x1f,
OFSZ = 0x20,
BW_RATE = 0x2c,
POWER_CTL = 0x2d,
INT_SOURCE = 0x30,
DATA_FORMAT = 0x31,
DATAX0 = 0x32,
DATAX1 = 0x33,
DATAY0 = 0x34,
DATAY1 = 0x35,
DATAZ0 = 0x36,
DATAZ1 = 0x37,
FIFO_CTL = 0x38,
FIFO_STATUS = 0x39
};
enum Rate {
RATE_3200 = 0xF,
RATE_1600 = 0xE,
RATE_800 = 0xD,
RATE_400 = 0xC,
RATE_200 = 0xB,
RATE_100 = 0xA,
RATE_50 = 0x9,
RATE_25 = 0x8,
RATE_12_5 = 0x7,
RATE_6_25 = 0x6,
RATE_3_13 = 0x5,
RATE_1_56 = 0x4,
RATE_0_78 = 0x3,
RATE_0_39 = 0x2,
RATE_0_20 = 0x1,
RATE_0_10 = 0x0
};
struct AccelData {
inline AccelData(): x(raw[0]), y(raw[1]), z(raw[2]) {}
inline uint8_t* getPtr() { return (uint8_t*)raw; }
static const int size = 6;
int16_t raw[3];
int16_t &x;
int16_t &y;
int16_t &z;
Scale scale_g;
float gx();
float gy();
float gz();
std::string toString();
};
class ADXL345 {
public:
virtual ~ADXL345();
void setScale(Scale scale);
Scale getScale();
void setRate(Rate rate);
Rate getRate();
void setFIFO(FIFOMode mode);
uint8_t getFIFOBytes();
void setPowerMode(PowerMode mode);
PowerMode getPowerMode();
bool getActive();
void setActive(bool active);
void zeroOffsets();
void initOffset();
AccelData readData();
protected:
void initialize(Scale scale = Scale_FullRes);
private:
Scale scale;
uint8_t readRegister(uint8_t register);
void writeRegister(uint8_t reg, uint8_t value);
int8_t checkoverflow(int32_t value);
virtual size_t readRegisters(uint8_t startreg, uint8_t* buff, size_t size) = 0;
virtual void writeRegisters(uint8_t reg, uint8_t* buff, size_t size) = 0;
virtual void fatalError(std::string error) = 0;
virtual void debug(std::string msg) = 0;
};
#endif // ADXL345_HPP_