Hi, I have some working code that reads data from an XSENS IMU.
It works well however it looks a bit convoluted. Lots of casting and for my own learning I would like to hear what more experienced developers think.
Thanks in advance for guidance.
void processXSENS(){
Wire.beginTransmission(I2C_ADD);
uint8_t error = Wire.endTransmission();
if (error == 0){
Wire.beginTransmission(I2C_ADD);
Wire.write(OPCODE_PIPE_STUS);
Wire.endTransmission();
Wire.requestFrom(I2C_ADD, 4);
while(Wire.available()) {
status[j] = Wire.read();
j++;
}
notificationSize = (uint16_t)status[0] | ((uint16_t)status[1] << 8);
measurementSize = (uint16_t)status[2] | ((uint16_t)status[3] << 8);
if(notificationSize>0 && measurementSize>0){
Wire.beginTransmission(I2C_ADD);
Wire.write(OPCODE_MEAS_PIPE);
Wire.endTransmission();
k=0;
Wire.requestFrom(I2C_ADD,measurementSize);
while(Wire.available()) {
status[k] = Wire.read();
k++;
}
}
}
n=0;
j=0;
uint32_t Y_axis_DeltaV = (uint32_t)status[24] | ((uint32_t)status[23] << 8) |((uint32_t)status[22] <<16) | ((uint32_t)status[21] << 24);
uint32_t Z_axis_DeltaV = (uint32_t)status[28] | ((uint32_t)status[27] << 8) |((uint32_t)status[26] <<16) | ((uint32_t)status[25] << 24);
float YDeltaV = *(float*)&Y_axis_DeltaV;
float ZDeltaV = *(float*)&Z_axis_DeltaV;
y_rounded = ((int) (YDeltaV * 10.0 + 0.5) / 10.0);
ZDeltaV = ZDeltaV+180.0;
z_rounded = ((int) (ZDeltaV * 10.0 + 0.5) / 10.0);
}