123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- /*
- * ADXL345.h
- * Library for accelerometer_ADXL345
- *
- * Copyright (c) 2013 seeed technology inc.
- * Author : FrankieChu
- * Create Time : Jan 2013
- * Change Log :
- *
- * The MIT License (MIT)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
- #include "Arduino.h"
- #ifndef ADXL345_h
- #define ADXL345_h
- /* ------- Register names ------- */
- #define ADXL345_DEVID 0x00
- #define ADXL345_RESERVED1 0x01
- #define ADXL345_THRESH_TAP 0x1d
- #define ADXL345_OFSX 0x1e
- #define ADXL345_OFSY 0x1f
- #define ADXL345_OFSZ 0x20
- #define ADXL345_DUR 0x21
- #define ADXL345_LATENT 0x22
- #define ADXL345_WINDOW 0x23
- #define ADXL345_THRESH_ACT 0x24
- #define ADXL345_THRESH_INACT 0x25
- #define ADXL345_TIME_INACT 0x26
- #define ADXL345_ACT_INACT_CTL 0x27
- #define ADXL345_THRESH_FF 0x28
- #define ADXL345_TIME_FF 0x29
- #define ADXL345_TAP_AXES 0x2a
- #define ADXL345_ACT_TAP_STATUS 0x2b
- #define ADXL345_BW_RATE 0x2c
- #define ADXL345_POWER_CTL 0x2d
- #define ADXL345_INT_ENABLE 0x2e
- #define ADXL345_INT_MAP 0x2f
- #define ADXL345_INT_SOURCE 0x30
- #define ADXL345_DATA_FORMAT 0x31
- #define ADXL345_DATAX0 0x32
- #define ADXL345_DATAX1 0x33
- #define ADXL345_DATAY0 0x34
- #define ADXL345_DATAY1 0x35
- #define ADXL345_DATAZ0 0x36
- #define ADXL345_DATAZ1 0x37
- #define ADXL345_FIFO_CTL 0x38
- #define ADXL345_FIFO_STATUS 0x39
- #define ADXL345_BW_1600 0xF // 1111
- #define ADXL345_BW_800 0xE // 1110
- #define ADXL345_BW_400 0xD // 1101
- #define ADXL345_BW_200 0xC // 1100
- #define ADXL345_BW_100 0xB // 1011
- #define ADXL345_BW_50 0xA // 1010
- #define ADXL345_BW_25 0x9 // 1001
- #define ADXL345_BW_12 0x8 // 1000
- #define ADXL345_BW_6 0x7 // 0111
- #define ADXL345_BW_3 0x6 // 0110
- /*
- Interrupt PINs
- INT1: 0
- INT2: 1
- */
- #define ADXL345_INT1_PIN 0x00
- #define ADXL345_INT2_PIN 0x01
- /*Interrupt bit position*/
- #define ADXL345_INT_DATA_READY_BIT 0x07
- #define ADXL345_INT_SINGLE_TAP_BIT 0x06
- #define ADXL345_INT_DOUBLE_TAP_BIT 0x05
- #define ADXL345_INT_ACTIVITY_BIT 0x04
- #define ADXL345_INT_INACTIVITY_BIT 0x03
- #define ADXL345_INT_FREE_FALL_BIT 0x02
- #define ADXL345_INT_WATERMARK_BIT 0x01
- #define ADXL345_INT_OVERRUNY_BIT 0x00
- #define ADXL345_DATA_READY 0x07
- #define ADXL345_SINGLE_TAP 0x06
- #define ADXL345_DOUBLE_TAP 0x05
- #define ADXL345_ACTIVITY 0x04
- #define ADXL345_INACTIVITY 0x03
- #define ADXL345_FREE_FALL 0x02
- #define ADXL345_WATERMARK 0x01
- #define ADXL345_OVERRUNY 0x00
- #define ADXL345_OK 1 // no error
- #define ADXL345_ERROR 0 // indicates error is predent
- #define ADXL345_NO_ERROR 0 // initial state
- #define ADXL345_READ_ERROR 1 // problem reading accel
- #define ADXL345_BAD_ARG 2 // bad method argument
- class ADXL345
- {
- public:
- bool status; // set when error occurs
- // see error code for details
- byte error_code; // Initial state
- double gains[3]; // counts to Gs
- char address[2] = { 0x1D, 0x53 };
- char deviceAddress;
- int addressMode;
-
- ADXL345();
- void init(int addressMode);
- void powerOn();
- double AxisDigitalAccelerometerReadX();
- double AxisDigitalAccelerometerReadY();
- double AxisDigitalAccelerometerReadZ();
- void readAccel(int* xyx);
- void readXYZ(int* x, int* y, int* z);
- void getAcceleration(double *xyz);
-
- void setTapThreshold(int tapThreshold);
- int getTapThreshold();
- void setAxisGains(double *_gains);
- void getAxisGains(double *_gains);
- void setAxisOffset(int x, int y, int z);
- void getAxisOffset(int* x, int* y, int*z);
- void setTapDuration(int tapDuration);
- int getTapDuration();
- void setDoubleTapLatency(int doubleTapLatency);
- int getDoubleTapLatency();
- void setDoubleTapWindow(int doubleTapWindow);
- int getDoubleTapWindow();
- void setActivityThreshold(int activityThreshold);
- int getActivityThreshold();
- void setInactivityThreshold(int inactivityThreshold);
- int getInactivityThreshold();
- void setTimeInactivity(int timeInactivity);
- int getTimeInactivity();
- void setFreeFallThreshold(int freeFallthreshold);
- int getFreeFallThreshold();
- void setFreeFallDuration(int freeFallDuration);
- int getFreeFallDuration();
-
- bool isActivityXEnabled();
- bool isActivityYEnabled();
- bool isActivityZEnabled();
- bool isInactivityXEnabled();
- bool isInactivityYEnabled();
- bool isInactivityZEnabled();
- bool isActivityAc();
- bool isInactivityAc();
- void setActivityAc(bool state);
- void setInactivityAc(bool state);
-
- bool getSuppressBit();
- void setSuppressBit(bool state);
- bool isTapDetectionOnX();
- void setTapDetectionOnX(bool state);
- bool isTapDetectionOnY();
- void setTapDetectionOnY(bool state);
- bool isTapDetectionOnZ();
- void setTapDetectionOnZ(bool state);
-
- void setActivityX(bool state);
- void setActivityY(bool state);
- void setActivityZ(bool state);
- void setInactivityX(bool state);
- void setInactivityY(bool state);
- void setInactivityZ(bool state);
-
- bool isActivitySourceOnX();
- bool isActivitySourceOnY();
- bool isActivitySourceOnZ();
- bool isTapSourceOnX();
- bool isTapSourceOnY();
- bool isTapSourceOnZ();
- bool isAsleep();
-
- bool isLowPower();
- void setLowPower(bool state);
- double getRate();
- void setRate(double rate);
- void set_bw(byte bw_code);
- byte get_bw_code();
-
-
- bool triggered(byte interrupts, int mask);
-
-
- byte getInterruptSource();
- bool getInterruptSource(byte interruptBit);
- bool getInterruptMapping(byte interruptBit);
- void setInterruptMapping(byte interruptBit, bool interruptPin);
- bool isInterruptEnabled(byte interruptBit);
- void setInterrupt(byte interruptBit, bool state);
-
- void getRangeSetting(byte* rangeSetting);
- void setRangeSetting(int val);
- bool getSelfTestBit();
- void setSelfTestBit(bool selfTestBit);
- bool getSpiBit();
- void setSpiBit(bool spiBit);
- bool getInterruptLevelBit();
- void setInterruptLevelBit(bool interruptLevelBit);
- bool getFullResBit();
- void setFullResBit(bool fullResBit);
- bool getJustifyBit();
- void setJustifyBit(bool justifyBit);
- void printAllRegister();
-
- private:
- void writeTo(byte address, byte val);
- void readFrom(byte address, int num, byte buff[]);
- void setRegisterBit(byte regAdress, int bitPos, bool state);
- bool getRegisterBit(byte regAdress, int bitPos);
- byte _buff[6] ; //6 bytes buffer for saving data read from the device
- };
- void print_byte(byte val);
- #endif
|