#ifndef ADXL345_CONTROLLER_H #define ADXL345_CONTROLLER_H #include #include #define ADXL345_DEVID 0x00 #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 DEFAULT_MIN_READ_INTERVAL 50 class ADXL345Controller { private: uint8_t _deviceAddress; unsigned long _lastReadTime; unsigned long _minReadInterval; double _lastX; double _lastY; double _lastZ; bool _lastReadSuccess; void setRegister(uint8_t reg, uint8_t value); uint8_t readRegister(uint8_t reg); void readRegisters(uint8_t reg, uint8_t count, uint8_t *buffer); public: ADXL345Controller(uint8_t deviceAddress = 0x53); void begin(); bool read(); double getX(); double getY(); double getZ(); bool isLastReadSuccessful() const; void setMinReadInterval(unsigned long interval); void setRange(uint8_t range); void setDataRate(uint8_t rate); void setOffsets(int8_t xOffset, int8_t yOffset, int8_t zOffset); }; #endif