7 #include "ADXL345_I2C.h"
8 #include "DigitalModule.h"
9 #include "NetworkCommunication/UsageReporting.h"
12 const uint8_t ADXL345_I2C::kAddress;
13 const uint8_t ADXL345_I2C::kPowerCtlRegister;
14 const uint8_t ADXL345_I2C::kDataFormatRegister;
15 const uint8_t ADXL345_I2C::kDataRegister;
16 constexpr
double ADXL345_I2C::kGsPerLSB;
30 m_i2c = module->
GetI2C(kAddress);
33 m_i2c->
Write(kPowerCtlRegister, kPowerCtl_Measure);
35 m_i2c->
Write(kDataFormatRegister, kDataFormat_FullRes | (uint8_t)range);
37 nUsageReporting::report(nUsageReporting::kResourceType_ADXL345, nUsageReporting::kADXL345_I2C, moduleNumber - 1);
61 m_i2c->
Read(kDataRegister + (uint8_t)axis,
sizeof(rawAccel), (uint8_t *)&rawAccel);
64 rawAccel = ((rawAccel >> 8) & 0xFF) | (rawAccel << 8);
66 return rawAccel * kGsPerLSB;
80 m_i2c->
Read(kDataRegister,
sizeof(rawData), (uint8_t*)rawData);
83 for (int32_t i=0; i<3; i++)
85 rawData[i] = ((rawData[i] >> 8) & 0xFF) | (rawData[i] << 8);
88 data.XAxis = rawData[0] * kGsPerLSB;
89 data.YAxis = rawData[1] * kGsPerLSB;
90 data.ZAxis = rawData[2] * kGsPerLSB;
virtual double GetAcceleration(Axes axis)
bool Read(uint8_t registerAddress, uint8_t count, uint8_t *data)
virtual AllAxes GetAccelerations()
static DigitalModule * GetInstance(uint8_t moduleNumber)
I2C * GetI2C(uint32_t address)
ADXL345_I2C(uint8_t moduleNumber, DataFormat_Range range=kRange_2G)
bool Write(uint8_t registerAddress, uint8_t data)