mirror of
https://github.com/letscontrolit/ESPEasy.git
synced 2026-09-14 18:46:59 +00:00
272 lines
10 KiB
C++
272 lines
10 KiB
C++
/*
|
|
Sparkfun's ADXL345 Library Main Header File
|
|
ADXL345.h
|
|
|
|
E.Robert @ SparkFun Electronics
|
|
Created: Jul 13, 2016
|
|
Updated: Sep 06, 2016
|
|
|
|
Hardware Resources:
|
|
- Arduino Development Board
|
|
- SparkFun Triple Access Accelerometer ADXL345
|
|
|
|
Development Environment Specifics:
|
|
Arduino 1.6.8
|
|
SparkFun Triple Axis Accelerometer Breakout - ADXL345
|
|
Arduino Uno
|
|
*/
|
|
|
|
#include "Arduino.h"
|
|
|
|
#ifndef ADXL345_h
|
|
# define ADXL345_h
|
|
|
|
/*************************** REGISTER MAP ***************************/
|
|
# define ADXL345_DEVID 0x00 // Device ID
|
|
# define ADXL345_RESERVED1 0x01 // Reserved. Do Not Access.
|
|
# define ADXL345_THRESH_TAP 0x1D // Tap Threshold.
|
|
# define ADXL345_OFSX 0x1E // X-Axis Offset.
|
|
# define ADXL345_OFSY 0x1F // Y-Axis Offset.
|
|
# define ADXL345_OFSZ 0x20 // Z- Axis Offset.
|
|
# define ADXL345_DUR 0x21 // Tap Duration.
|
|
# define ADXL345_LATENT 0x22 // Tap Latency.
|
|
# define ADXL345_WINDOW 0x23 // Tap Window.
|
|
# define ADXL345_THRESH_ACT 0x24 // Activity Threshold
|
|
# define ADXL345_THRESH_INACT 0x25 // Inactivity Threshold
|
|
# define ADXL345_TIME_INACT 0x26 // Inactivity Time
|
|
# define ADXL345_ACT_INACT_CTL 0x27 // Axis Enable Control for Activity and Inactivity Detection
|
|
# define ADXL345_THRESH_FF 0x28 // Free-Fall Threshold.
|
|
# define ADXL345_TIME_FF 0x29 // Free-Fall Time.
|
|
# define ADXL345_TAP_AXES 0x2A // Axis Control for Tap/Double Tap.
|
|
# define ADXL345_ACT_TAP_STATUS 0x2B // Source of Tap/Double Tap
|
|
# define ADXL345_BW_RATE 0x2C // Data Rate and Power mode Control
|
|
# define ADXL345_POWER_CTL 0x2D // Power-Saving Features Control
|
|
# define ADXL345_INT_ENABLE 0x2E // Interrupt Enable Control
|
|
# define ADXL345_INT_MAP 0x2F // Interrupt Mapping Control
|
|
# define ADXL345_INT_SOURCE 0x30 // Source of Interrupts
|
|
# define ADXL345_DATA_FORMAT 0x31 // Data Format Control
|
|
# define ADXL345_DATAX0 0x32 // X-Axis Data 0
|
|
# define ADXL345_DATAX1 0x33 // X-Axis Data 1
|
|
# define ADXL345_DATAY0 0x34 // Y-Axis Data 0
|
|
# define ADXL345_DATAY1 0x35 // Y-Axis Data 1
|
|
# define ADXL345_DATAZ0 0x36 // Z-Axis Data 0
|
|
# define ADXL345_DATAZ1 0x37 // Z-Axis Data 1
|
|
# define ADXL345_FIFO_CTL 0x38 // FIFO Control
|
|
# define ADXL345_FIFO_STATUS 0x39 // FIFO Status
|
|
|
|
# define ADXL345_BW_1600 0xF // 1111 IDD = 40uA
|
|
# define ADXL345_BW_800 0xE // 1110 IDD = 90uA
|
|
# define ADXL345_BW_400 0xD // 1101 IDD = 140uA
|
|
# define ADXL345_BW_200 0xC // 1100 IDD = 140uA
|
|
# define ADXL345_BW_100 0xB // 1011 IDD = 140uA
|
|
# define ADXL345_BW_50 0xA // 1010 IDD = 140uA
|
|
# define ADXL345_BW_25 0x9 // 1001 IDD = 90uA
|
|
# define ADXL345_BW_12_5 0x8 // 1000 IDD = 60uA
|
|
# define ADXL345_BW_6_25 0x7 // 0111 IDD = 50uA
|
|
# define ADXL345_BW_3_13 0x6 // 0110 IDD = 45uA
|
|
# define ADXL345_BW_1_56 0x5 // 0101 IDD = 40uA
|
|
# define ADXL345_BW_0_78 0x4 // 0100 IDD = 34uA
|
|
# define ADXL345_BW_0_39 0x3 // 0011 IDD = 23uA
|
|
# define ADXL345_BW_0_20 0x2 // 0010 IDD = 23uA
|
|
# define ADXL345_BW_0_10 0x1 // 0001 IDD = 23uA
|
|
# define ADXL345_BW_0_05 0x0 // 0000 IDD = 23uA
|
|
|
|
|
|
/************************** INTERRUPT PINS **************************/
|
|
# define ADXL345_INT1_PIN 0x00 // INT1: 0
|
|
# define ADXL345_INT2_PIN 0x01 // INT2: 1
|
|
|
|
|
|
/********************** 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
|
|
|
|
|
|
/****************************** ERRORS ******************************/
|
|
# define ADXL345_OK 1 // No Error
|
|
# define ADXL345_ERROR 0 // Error Exists
|
|
|
|
# define ADXL345_NO_ERROR 0 // Initial State
|
|
# define ADXL345_READ_ERROR 1 // Accelerometer Reading Error
|
|
# define ADXL345_BAD_ARG 2 // Bad Argument
|
|
|
|
|
|
class ADXL345 {
|
|
public:
|
|
|
|
bool status; // Set When Error Exists
|
|
|
|
byte error_code; // Initial State
|
|
double gains[3]; // Counts to Gs
|
|
|
|
ADXL345(uint8_t i2c_addr);
|
|
ADXL345(int CS);
|
|
void powerOn();
|
|
void powerOff();
|
|
int getDevID();
|
|
void readAccel(int *xyx);
|
|
void readAccel(int *x,
|
|
int *y,
|
|
int *z);
|
|
void get_Gxyz(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 setTapDetectionOnXYZ(bool stateX,
|
|
bool stateY,
|
|
bool stateZ);
|
|
|
|
void setActivityX(bool state);
|
|
void setActivityY(bool state);
|
|
void setActivityZ(bool state);
|
|
void setActivityXYZ(bool stateX,
|
|
bool stateY,
|
|
bool stateZ);
|
|
void setInactivityX(bool state);
|
|
void setInactivityY(bool state);
|
|
void setInactivityZ(bool state);
|
|
void setInactivityXYZ(bool stateX,
|
|
bool stateY,
|
|
bool stateZ);
|
|
|
|
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 setImportantInterruptMapping(int single_tap,
|
|
int double_tap,
|
|
int free_fall,
|
|
int activity,
|
|
int inactivity);
|
|
void InactivityINT(bool status);
|
|
void ActivityINT(bool status);
|
|
void FreeFallINT(bool status);
|
|
void doubleTapINT(bool status);
|
|
void singleTapINT(bool status);
|
|
|
|
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 writeToI2C(byte address,
|
|
byte val);
|
|
void writeToSPI(byte address,
|
|
byte val);
|
|
void readFrom(byte address,
|
|
int num,
|
|
byte buff[]);
|
|
void readFromI2C(byte address,
|
|
int num,
|
|
byte buff[]);
|
|
void readFromSPI(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
|
|
int _CS = 10;
|
|
bool I2C = true;
|
|
unsigned long SPIfreq = 5000000;
|
|
uint8_t _i2c_addr;
|
|
};
|
|
void print_byte(byte val);
|
|
#endif // ifndef ADXL345_h
|