97 if (!this->
write_byte(MMC56X3_CTRL0_REG, 0x01)) {
107 uint8_t buffer[9] = {0};
109 if (!this->
read_byte(MMC56X3_ADDR_XOUT0, &buffer[0]) || !this->
read_byte(MMC56X3_ADDR_XOUT1, &buffer[1]) ||
110 !this->
read_byte(MMC56X3_ADDR_XOUT2, &buffer[2])) {
115 if (!this->
read_byte(MMC56X3_ADDR_YOUT0, &buffer[3]) || !this->
read_byte(MMC56X3_ADDR_YOUT1, &buffer[4]) ||
116 !this->
read_byte(MMC56X3_ADDR_YOUT2, &buffer[5])) {
121 if (!this->
read_byte(MMC56X3_ADDR_ZOUT0, &buffer[6]) || !this->
read_byte(MMC56X3_ADDR_ZOUT1, &buffer[7]) ||
122 !this->
read_byte(MMC56X3_ADDR_ZOUT2, &buffer[8])) {
128 raw_x |= buffer[0] << 12;
129 raw_x |= buffer[1] << 4;
130 raw_x |= buffer[2] << 0;
132 const float x = 0.0625 * (raw_x - 524288);
135 raw_y |= buffer[3] << 12;
136 raw_y |= buffer[4] << 4;
137 raw_y |= buffer[5] << 0;
139 const float y = 0.0625 * (raw_y - 524288);
142 raw_z |= buffer[6] << 12;
143 raw_z |= buffer[7] << 4;
144 raw_z |= buffer[8] << 0;
146 const float z = 0.0625 * (raw_z - 524288);
148 const float heading = atan2f(0.0f -
x,
y) * 180.0f / M_PI;
149 ESP_LOGD(TAG,
"Got x=%0.02fµT y=%0.02fµT z=%0.02fµT heading=%0.01f°",
x,
y,
z, heading);