Files
embedded-labs/include/drivers/AccelerometerController.h
2025-04-28 18:30:29 +03:00

72 lines
2.0 KiB
C++

#ifndef ADXL345_CONTROLLER_H
#define ADXL345_CONTROLLER_H
#include <Arduino.h>
#include <Wire.h>
#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