36 MotionComponent::setup();
41 this->
mark_failed(LOG_STR(
"SPI device is not ready"));
61 if (who_am_i != ICM20689_WHO_AM_I_VALUE) {
62 ESP_LOGE(TAG,
"Unexpected WHO_AM_I 0x%02X (expected 0x%02X) -- check wiring/CS", who_am_i, ICM20689_WHO_AM_I_VALUE);
92 const uint8_t accel_range =
static_cast<uint8_t
>(this->
accel_range_);
93 const uint8_t gyro_range =
static_cast<uint8_t
>(this->
gyro_range_);
99 uint8_t raw_data[14] = {};
100 this->
read_registers_(ICM20689_REG_ACCEL_XOUT_H, raw_data,
sizeof(raw_data));
102 const float accel_factor = accel_scale(accel_range);
104 data.acceleration[motion::X_AXIS] =
static_cast<int16_t
>(
encode_uint16(raw_data[0], raw_data[1])) * accel_factor;
105 data.acceleration[motion::Y_AXIS] =
static_cast<int16_t
>(
encode_uint16(raw_data[2], raw_data[3])) * accel_factor;
106 data.acceleration[motion::Z_AXIS] =
static_cast<int16_t
>(
encode_uint16(raw_data[4], raw_data[5])) * accel_factor;
108 const float gyro_factor = gyro_scale(gyro_range);
110 data.angular_rate[motion::X_AXIS] =
static_cast<int16_t
>(
encode_uint16(raw_data[8], raw_data[9])) * gyro_factor;
111 data.angular_rate[motion::Y_AXIS] =
static_cast<int16_t
>(
encode_uint16(raw_data[10], raw_data[11])) * gyro_factor;
112 data.angular_rate[motion::Z_AXIS] =
static_cast<int16_t
>(
encode_uint16(raw_data[12], raw_data[13])) * gyro_factor;