20 : I2C::
Device{bus, (uint8_t)(0x40 | (A1 << 1) | A0)}
40 if (rq.
mem != 0xfe)
return;
41 uint16_t iRawAngle = ((uint16_t) rq.
data.buf[0] << 6);
42 iRawAngle += (rq.
data.buf[1] & 0x3F);
45 this->dLastAngle = ((double) iRawAngle);
48 double dCurAngle = ((double) iRawAngle);
49 double dDiffAngle = this->dLastAngle - dCurAngle;
50 if (this->dLastAngle == -1 || (this->dLastAngle == 0 && (dDiffAngle > 1000 || dDiffAngle < -1000))) {
52 }
else if (dDiffAngle < -10000) {
54 }
else if (dDiffAngle > 10000) {
58 this->dAngle += dDiffAngle;
59 this->dLastAngle = dCurAngle;
67 return this->dAngle / 16384 * 2 * M_PI;
84 double dLastAngle = 0;
14-bit rotary position sensor
Definition AS5048b.h:12
AS5048B(Sink< I2C::Request > &bus, bool A0, bool A1)
initialize the sensor.
Definition AS5048b.h:19
void callback(const I2C::Request &rq) override
callback.
Definition AS5048b.h:39
double get()
Returns the angle in radians.
Definition AS5048b.h:66
void measure()
start async read of angle
Definition AS5048b.h:27
void reset()
Resets the angles.
Definition AS5048b.h:73
generic I2C device wrapper.
Definition i2c.h:21
Device(Sink< Request > &bus, uint8_t address)
construct device on bus with given address
Definition i2c.h:26
struct defining an I2C request.
Definition i2c.h:37
Buffer< uint8_t > data
transfer data
Definition i2c.h:39
uint8_t mem
memory address for memory transmissions
Definition i2c.h:61
generic object sink, i.e.
Definition streams.h:15