#ifndef _ADXL345_H_ #define _ADXL345_H_ #define ADXL345_ADDRESS_ALT_LOW 0x53 // alt address pin low (GND) #define ADXL345_ADDRESS_ALT_HIGH 0x1D // alt address pin high (VCC) #define ADXL345_DEFAULT_ADDRESS ADXL345_ADDRESS_ALT_LOW #define ADXL345_RA_DEVID 0x00 #define ADXL345_RA_RESERVED1 0x01 #define ADXL345_RA_THRESH_TAP 0x1D #define ADXL345_RA_OFSX 0x1E #define ADXL345_RA_OFSY 0x1F #define ADXL345_RA_OFSZ 0x20 #define ADXL345_RA_DUR 0x21 #define ADXL345_RA_LATENT 0x22 #define ADXL345_RA_WINDOW 0x23 #define ADXL345_RA_THRESH_ACT 0x24 #define ADXL345_RA_THRESH_INACT 0x25 #define ADXL345_RA_TIME_INACT 0x26 #define ADXL345_RA_ACT_INACT_CTL 0x27 #define ADXL345_RA_THRESH_FF 0x28 #define ADXL345_RA_TIME_FF 0x29 #define ADXL345_RA_TAP_AXES 0x2A #define ADXL345_RA_ACT_TAP_STATUS 0x2B #define ADXL345_RA_BW_RATE 0x2C #define ADXL345_RA_POWER_CTL 0x2D #define ADXL345_RA_INT_ENABLE 0x2E #define ADXL345_RA_INT_MAP 0x2F #define ADXL345_RA_INT_SOURCE 0x30 #define ADXL345_RA_DATA_FORMAT 0x31 #define ADXL345_RA_DATAX0 0x32 #define ADXL345_RA_DATAX1 0x33 #define ADXL345_RA_DATAY0 0x34 #define ADXL345_RA_DATAY1 0x35 #define ADXL345_RA_DATAZ0 0x36 #define ADXL345_RA_DATAZ1 0x37 #define ADXL345_RA_FIFO_CTL 0x38 #define ADXL345_RA_FIFO_STATUS 0x39 #define ADXL345_AIC_ACT_AC_BIT 7 #define ADXL345_AIC_ACT_X_BIT 6 #define ADXL345_AIC_ACT_Y_BIT 5 #define ADXL345_AIC_ACT_Z_BIT 4 #define ADXL345_AIC_INACT_AC_BIT 3 #define ADXL345_AIC_INACT_X_BIT 2 #define ADXL345_AIC_INACT_Y_BIT 1 #define ADXL345_AIC_INACT_Z_BIT 0 #define ADXL345_TAPAXIS_SUP_BIT 3 #define ADXL345_TAPAXIS_X_BIT 2 #define ADXL345_TAPAXIS_Y_BIT 1 #define ADXL345_TAPAXIS_Z_BIT 0 #define ADXL345_TAPSTAT_ACTX_BIT 6 #define ADXL345_TAPSTAT_ACTY_BIT 5 #define ADXL345_TAPSTAT_ACTZ_BIT 4 #define ADXL345_TAPSTAT_ASLEEP_BIT 3 #define ADXL345_TAPSTAT_TAPX_BIT 2 #define ADXL345_TAPSTAT_TAPY_BIT 1 #define ADXL345_TAPSTAT_TAPZ_BIT 0 #define ADXL345_BW_LOWPOWER_BIT 4 #define ADXL345_BW_RATE_BIT 3 #define ADXL345_BW_RATE_LENGTH 4 #define ADXL345_RATE_3200 15 #define ADXL345_RATE_1600 14 #define ADXL345_RATE_800 13 #define ADXL345_RATE_400 12 #define ADXL345_RATE_200 11 #define ADXL345_RATE_100 10 #define ADXL345_RATE_50 9 #define ADXL345_RATE_25 8 #define ADXL345_RATE_12P5 7 #define ADXL345_RATE_6P25 6 #define ADXL345_RATE_3P13 5 #define ADXL345_RATE_1P56 4 #define ADXL345_RATE_0P78 3 #define ADXL345_RATE_0P39 2 #define ADXL345_RATE_0P20 1 #define ADXL345_RATE_0P10 0 #define ADXL345_PCTL_LINK_BIT 5 #define ADXL345_PCTL_AUTOSLEEP_BIT 4 #define ADXL345_PCTL_MEASURE_BIT 3 #define ADXL345_PCTL_SLEEP_BIT 2 #define ADXL345_PCTL_WAKEUP_BIT 1 #define ADXL345_PCTL_WAKEUP_LENGTH 2 #define ADXL345_WAKEUP_8HZ 0b00 #define ADXL345_WAKEUP_4HZ 0b01 #define ADXL345_WAKEUP_2HZ 0b10 #define ADXL345_WAKEUP_1HZ 0b11 #define ADXL345_INT_DATA_READY_BIT 7 #define ADXL345_INT_SINGLE_TAP_BIT 6 #define ADXL345_INT_DOUBLE_TAP_BIT 5 #define ADXL345_INT_ACTIVITY_BIT 4 #define ADXL345_INT_INACTIVITY_BIT 3 #define ADXL345_INT_FREE_FALL_BIT 2 #define ADXL345_INT_WATERMARK_BIT 1 #define ADXL345_INT_OVERRUN_BIT 0 #define ADXL345_FORMAT_SELFTEST_BIT 7 #define ADXL345_FORMAT_SPIMODE_BIT 6 #define ADXL345_FORMAT_INTMODE_BIT 5 #define ADXL345_FORMAT_FULL_RES_BIT 3 #define ADXL345_FORMAT_JUSTIFY_BIT 2 #define ADXL345_FORMAT_RANGE_BIT 1 #define ADXL345_FORMAT_RANGE_LENGTH 2 #define ADXL345_RANGE_2G 0 #define ADXL345_RANGE_4G 1 #define ADXL345_RANGE_8G 2 #define ADXL345_RANGE_16G 3 #define ADXL345_FIFO_MODE_BIT 7 #define ADXL345_FIFO_MODE_LENGTH 2 #define ADXL345_FIFO_TRIGGER_BIT 5 #define ADXL345_FIFO_SAMPLES_BIT 4 #define ADXL345_FIFO_SAMPLES_LENGTH 5 #define ADXL345_FIFO_MODE_BYPASS 0 #define ADXL345_FIFO_MODE_FIFO 1 #define ADXL345_FIFO_MODE_STREAM 2 #define ADXL345_FIFO_MODE_TRIGGER 3 #define ADXL345_FIFOSTAT_TRIGGER_BIT 7 #define ADXL345_FIFOSTAT_LENGTH_BIT 5 #define ADXL345_FIFOSTAT_LENGTH_LENGTH 6 class ADXL345 { public: ADXL345(); ADXL345(unsigned char address); void initialize(); bool testConnection(); // DEVID register unsigned char getDeviceID(); // BW_RATE register void setLowPowerEnabled(bool enabled); void setRate(unsigned char rate); // POWER_CTL register void setAutoSleepEnabled(bool enabled); void setMeasureEnabled(bool enabled); // DATA_FORMAT register void setSelfTestEnabled(unsigned char enabled); void setInterruptMode(unsigned char mode); void setFullResolution(unsigned char resolution); void setRange(unsigned char range); // DATA* registers void getAcceleration(short* x, short* y, short* z); private: unsigned char devAddr; unsigned char buffer[6]; }; #endif /* _ADXL345_H_ */