Make compass io actually work somewhat
This commit is contained in:
parent
e8ee6cd107
commit
67a1c98b34
@ -56,6 +56,8 @@ void MPU::Init() {
|
|||||||
}
|
}
|
||||||
mpu_->setAccelFullScale(MPU_ACCEL_FS);
|
mpu_->setAccelFullScale(MPU_ACCEL_FS);
|
||||||
mpu_->setGyroFullScale(MPU_GYRO_FS);
|
mpu_->setGyroFullScale(MPU_GYRO_FS);
|
||||||
|
// force magnetometer into continuous mode
|
||||||
|
mpu_->compassWriteByte(0x0A, 0x12);
|
||||||
xSemaphoreGive(i2c_mutex);
|
xSemaphoreGive(i2c_mutex);
|
||||||
|
|
||||||
BaseType_t xRet =
|
BaseType_t xRet =
|
||||||
@ -77,19 +79,31 @@ void MPU::DoTask() {
|
|||||||
esp_err_t ret;
|
esp_err_t ret;
|
||||||
while (true) {
|
while (true) {
|
||||||
vTaskDelay(pdMS_TO_TICKS(50));
|
vTaskDelay(pdMS_TO_TICKS(50));
|
||||||
|
uint8_t mxh, mxl, myh, myl, mzh, mzl, n;
|
||||||
xSemaphoreTake(i2c_mutex, portMAX_DELAY);
|
xSemaphoreTake(i2c_mutex, portMAX_DELAY);
|
||||||
ret = mpu_->motion(&accel_, &gyro_, &mag_);
|
ret = mpu_->motion(&accel_, &gyro_);
|
||||||
|
mpu_->compassReadByte(0x03, &mxl);
|
||||||
|
mpu_->compassReadByte(0x04, &mxh);
|
||||||
|
mpu_->compassReadByte(0x05, &myl);
|
||||||
|
mpu_->compassReadByte(0x06, &myh);
|
||||||
|
mpu_->compassReadByte(0x07, &mzl);
|
||||||
|
mpu_->compassReadByte(0x08, &mzh);
|
||||||
|
mpu_->compassReadByte(0x09, &n);
|
||||||
xSemaphoreGive(i2c_mutex);
|
xSemaphoreGive(i2c_mutex);
|
||||||
if (ret != ESP_OK) {
|
if (ret != ESP_OK) {
|
||||||
ESP_LOGE(TAG, "error reading MPU");
|
ESP_LOGE(TAG, "error reading MPU");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
int16_t mx = (static_cast<int16_t>(mxh) << 8) | static_cast<int16_t>(mxl);
|
||||||
|
int16_t my = (static_cast<int16_t>(myh) << 8) | static_cast<int16_t>(myl);
|
||||||
|
int16_t mz = (static_cast<int16_t>(mzh) << 8) | static_cast<int16_t>(mzl);
|
||||||
|
ESP_LOGV(TAG, "compass: %d, %d, %d", mx, my, mz);
|
||||||
xSemaphoreTake(mutex_, pdMS_TO_TICKS(1000));
|
xSemaphoreTake(mutex_, pdMS_TO_TICKS(1000));
|
||||||
mpu_data_.accel = mpud::accelGravity(accel_, MPU_ACCEL_FS);
|
mpu_data_.accel = mpud::accelGravity(accel_, MPU_ACCEL_FS);
|
||||||
mpu_data_.gyro_rate = mpud::gyroDegPerSec(gyro_, MPU_GYRO_FS);
|
mpu_data_.gyro_rate = mpud::gyroDegPerSec(gyro_, MPU_GYRO_FS);
|
||||||
mpu_data_.mag.x = ((float)mag_.x) * MPU_MAG_TO_FLUX;
|
mpu_data_.mag.x = ((float)mx) * MPU_MAG_TO_FLUX;
|
||||||
mpu_data_.mag.y = ((float)mag_.y) * MPU_MAG_TO_FLUX;
|
mpu_data_.mag.y = ((float)my) * MPU_MAG_TO_FLUX;
|
||||||
mpu_data_.mag.z = ((float)mag_.z) * MPU_MAG_TO_FLUX;
|
mpu_data_.mag.z = ((float)mz) * MPU_MAG_TO_FLUX;
|
||||||
xSemaphoreGive(mutex_);
|
xSemaphoreGive(mutex_);
|
||||||
}
|
}
|
||||||
vTaskDelete(NULL);
|
vTaskDelete(NULL);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user