ADXL345 test on L476

Dependencies:   mbed

adxl345.h

Committer:
tifo
Date:
2017-11-30
Revision:
0:a0f7c6807a3a

File content as of revision 0:a0f7c6807a3a:

#ifndef ADXL435_H
#define ADXL435_H

#include "mbed.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 

    char error_code;                // Initial State
    double gains[3];                // Counts to Gs
     
     
    
    ADXL345();
    
    void powerOn();
    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);
 
    
    bool triggered(char interrupts, int mask);
    
    char getInterruptSource();
    bool getInterruptSource(char interruptBit);
    bool getInterruptMapping(char interruptBit);
    void setInterruptMapping(char interruptBit, bool interruptPin);
    bool isInterruptEnabled(char interruptBit);
    void setInterrupt(char 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(char* rangeSetting);
    void setRangeSetting(int val);
    bool getSelfTestBit();
    void setSelfTestBit(bool selfTestBit);
    bool getInterruptLevelBit();
    void setInterruptLevelBit(bool interruptLevelBit);
    bool getFullResBit();
    void setFullResBit(bool fullResBit);
    bool getJustifyBit();
    void setJustifyBit(bool justifyBit);
    void printAllRegister();
    
private:
    void writeToI2C(char address, char val);
    void readFromI2C(char address, int num, char buff[]);
    void setRegisterBit(char regAdress, int bitPos, bool state);
    bool getRegisterBit(char regAdress, int bitPos);  
    char _buff[6] ;     //  6 chars Buffer
};
void print_char(char val);

#endif