Subversion Repositories FlightCtrl

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1993 - 1
/**************************************************************************
2
 *                                                                         *
3
 * ADXL345 Driver for Arduino                                              *
4
 *                                                                         *
5
 ***************************************************************************
6
 *                                                                         *
7
 * This program is free software; you can redistribute it and/or modify    *
8
 * it under the terms of the GNU License.                                  *
9
 * This program is distributed in the hope that it will be useful,         *
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of          *
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *
12
 * GNU License V2 for more details.                                        *
13
 *                                                                         *
14
 ***************************************************************************/
15
#include "WProgram.h"
16
 
17
#ifndef ADXL345_h
18
#define ADXL345_h
19
 
20
/* -- ADXL345 addresses --*/
21
#define ADXL345_ADDR_ALT_HIGH 0x1D // ADXL345 address when ALT is connected to HIGH
22
#define ADXL345_ADDR_ALT_LOW  0x53 // ADXL345 address when ALT is connected to LOW
23
 
24
/* ------- Register names ------- */
25
#define ADXL345_DEVID 0x00
26
#define ADXL345_RESERVED1 0x01
27
#define ADXL345_THRESH_TAP 0x1d
28
#define ADXL345_OFSX 0x1e
29
#define ADXL345_OFSY 0x1f
30
#define ADXL345_OFSZ 0x20
31
#define ADXL345_DUR 0x21
32
#define ADXL345_LATENT 0x22
33
#define ADXL345_WINDOW 0x23
34
#define ADXL345_THRESH_ACT 0x24
35
#define ADXL345_THRESH_INACT 0x25
36
#define ADXL345_TIME_INACT 0x26
37
#define ADXL345_ACT_INACT_CTL 0x27
38
#define ADXL345_THRESH_FF 0x28
39
#define ADXL345_TIME_FF 0x29
40
#define ADXL345_TAP_AXES 0x2a
41
#define ADXL345_ACT_TAP_STATUS 0x2b
42
#define ADXL345_BW_RATE 0x2c
43
#define ADXL345_POWER_CTL 0x2d
44
#define ADXL345_INT_ENABLE 0x2e
45
#define ADXL345_INT_MAP 0x2f
46
#define ADXL345_INT_SOURCE 0x30
47
#define ADXL345_DATA_FORMAT 0x31
48
#define ADXL345_DATAX0 0x32
49
#define ADXL345_DATAX1 0x33
50
#define ADXL345_DATAY0 0x34
51
#define ADXL345_DATAY1 0x35
52
#define ADXL345_DATAZ0 0x36
53
#define ADXL345_DATAZ1 0x37
54
#define ADXL345_FIFO_CTL 0x38
55
#define ADXL345_FIFO_STATUS 0x39
56
 
57
#define ADXL345_BW_1600 0xF // 1111
58
#define ADXL345_BW_800  0xE // 1110
59
#define ADXL345_BW_400  0xD // 1101  
60
#define ADXL345_BW_200  0xC // 1100
61
#define ADXL345_BW_100  0xB // 1011  
62
#define ADXL345_BW_50   0xA // 1010 
63
#define ADXL345_BW_25   0x9 // 1001 
64
#define ADXL345_BW_12   0x8 // 1000 
65
#define ADXL345_BW_6    0x7 // 0111
66
#define ADXL345_BW_3    0x6 // 0110
67
 
68
 
69
/*
70
 Interrupt PINs
71
 INT1: 0
72
 INT2: 1
73
 */
74
#define ADXL345_INT1_PIN 0x00
75
#define ADXL345_INT2_PIN 0x01
76
 
77
/*
78
 Interrupt bit position
79
 */
80
#define ADXL345_INT_DATA_READY_BIT 0x07
81
#define ADXL345_INT_SINGLE_TAP_BIT 0x06
82
#define ADXL345_INT_DOUBLE_TAP_BIT 0x05
83
#define ADXL345_INT_ACTIVITY_BIT   0x04
84
#define ADXL345_INT_INACTIVITY_BIT 0x03
85
#define ADXL345_INT_FREE_FALL_BIT  0x02
86
#define ADXL345_INT_WATERMARK_BIT  0x01
87
#define ADXL345_INT_OVERRUNY_BIT   0x00
88
 
89
#define ADXL345_OK    1 // no error
90
#define ADXL345_ERROR 0 // indicates error is predent
91
 
92
#define ADXL345_NO_ERROR   0 // initial state
93
#define ADXL345_READ_ERROR 1 // problem reading accel
94
#define ADXL345_BAD_ARG    2 // bad method argument
95
 
96
class ADXL345
97
{
98
public:
99
  bool status;           // set when error occurs 
100
                         // see error code for details
101
  byte error_code;       // Initial state
102
  float gains[3];        // counts to Gs
103
 
104
  ADXL345();
105
  void init(int address);
106
  void powerOn();
107
  void readAccel(int* xyx);
108
  void readAccel(int* x, int* y, int* z);
109
  void get_Gxyz(float *xyz);
110
 
111
  void setTapThreshold(int tapThreshold);
112
  int getTapThreshold();
113
  void setAxisGains(float *_gains);
114
  void getAxisGains(float *_gains);
115
  void setAxisOffset(int x, int y, int z);
116
  void getAxisOffset(int* x, int* y, int*z);
117
  void setTapDuration(int tapDuration);
118
  int getTapDuration();
119
  void setDoubleTapLatency(int floatTapLatency);
120
  int getDoubleTapLatency();
121
  void setDoubleTapWindow(int floatTapWindow);
122
  int getDoubleTapWindow();
123
  void setActivityThreshold(int activityThreshold);
124
  int getActivityThreshold();
125
  void setInactivityThreshold(int inactivityThreshold);
126
  int getInactivityThreshold();
127
  void setTimeInactivity(int timeInactivity);
128
  int getTimeInactivity();
129
  void setFreeFallThreshold(int freeFallthreshold);
130
  int getFreeFallThreshold();
131
  void setFreeFallDuration(int freeFallDuration);
132
  int getFreeFallDuration();
133
 
134
  bool isActivityXEnabled();
135
  bool isActivityYEnabled();
136
  bool isActivityZEnabled();
137
  bool isInactivityXEnabled();
138
  bool isInactivityYEnabled();
139
  bool isInactivityZEnabled();
140
  bool isActivityAc();
141
  bool isInactivityAc();
142
  void setActivityAc(bool state);
143
  void setInactivityAc(bool state);
144
 
145
  bool getSuppressBit();
146
  void setSuppressBit(bool state);
147
  bool isTapDetectionOnX();
148
  void setTapDetectionOnX(bool state);
149
  bool isTapDetectionOnY();
150
  void setTapDetectionOnY(bool state);
151
  bool isTapDetectionOnZ();
152
  void setTapDetectionOnZ(bool state);
153
 
154
  void setActivityX(bool state);
155
  void setActivityY(bool state);
156
  void setActivityZ(bool state);
157
  void setInactivityX(bool state);
158
  void setInactivityY(bool state);
159
  void setInactivityZ(bool state);
160
 
161
  bool isActivitySourceOnX();
162
  bool isActivitySourceOnY();
163
  bool isActivitySourceOnZ();
164
  bool isTapSourceOnX();
165
  bool isTapSourceOnY();
166
  bool isTapSourceOnZ();
167
  bool isAsleep();
168
 
169
  bool isLowPower();
170
  void setLowPower(bool state);
171
  float getRate();
172
  void setRate(float rate);
173
  void set_bw(byte bw_code);
174
  byte get_bw_code();  
175
 
176
  byte getInterruptSource();
177
  bool getInterruptSource(byte interruptBit);
178
  bool getInterruptMapping(byte interruptBit);
179
  void setInterruptMapping(byte interruptBit, bool interruptPin);
180
  bool isInterruptEnabled(byte interruptBit);
181
  void setInterrupt(byte interruptBit, bool state);
182
 
183
  void getRangeSetting(byte* rangeSetting);
184
  void setRangeSetting(int val);
185
  bool getSelfTestBit();
186
  void setSelfTestBit(bool selfTestBit);
187
  bool getSpiBit();
188
  void setSpiBit(bool spiBit);
189
  bool getInterruptLevelBit();
190
  void setInterruptLevelBit(bool interruptLevelBit);
191
  bool getFullResBit();
192
  void setFullResBit(bool fullResBit);
193
  bool getJustifyBit();
194
  void setJustifyBit(bool justifyBit);
195
  void printAllRegister();
196
  void writeTo(byte address, byte val);
197
 
198
private:
199
  void readFrom(byte address, int num, byte buff[]);
200
  void setRegisterBit(byte regAdress, int bitPos, bool state);
201
  bool getRegisterBit(byte regAdress, int bitPos);  
202
  byte _buff[6] ;    //6 bytes buffer for saving data read from the device
203
  int _dev_address;
204
};
205
void print_byte(byte val);
206
#endif