|
|
|
@ -14,8 +14,8 @@ constexpr float M_PI = atanf(1.f) * 4;
@@ -14,8 +14,8 @@ constexpr float M_PI = atanf(1.f) * 4;
|
|
|
|
|
namespace ugv { |
|
|
|
|
namespace io { |
|
|
|
|
|
|
|
|
|
static constexpr gpio_num_t MPU_SDA = GPIO_NUM_5; |
|
|
|
|
static constexpr gpio_num_t MPU_SCL = GPIO_NUM_4; |
|
|
|
|
static constexpr gpio_num_t MPU_SDA = GPIO_NUM_25; |
|
|
|
|
static constexpr gpio_num_t MPU_SCL = GPIO_NUM_26; |
|
|
|
|
static constexpr mpud::accel_fs_t MPU_ACCEL_FS = mpud::ACCEL_FS_2G; |
|
|
|
|
static constexpr mpud::gyro_fs_t MPU_GYRO_FS = mpud::GYRO_FS_500DPS; |
|
|
|
|
static constexpr float MPU_MAG_TO_FLUX = (4912.f) / (32760.f); |
|
|
|
@ -33,12 +33,13 @@ MPU::~MPU() { delete mpu_; }
@@ -33,12 +33,13 @@ MPU::~MPU() { delete mpu_; }
|
|
|
|
|
|
|
|
|
|
void MPU::Init() { |
|
|
|
|
xSemaphoreTake(i2c_mutex, portMAX_DELAY); |
|
|
|
|
mpu_bus_ = &i2c0; |
|
|
|
|
mpu_bus_ = &i2c1; |
|
|
|
|
// This is shared with the oled, so just use those pins
|
|
|
|
|
// mpu_bus_->begin(MPU_SDA, MPU_SCL);
|
|
|
|
|
mpu_bus_->begin(MPU_SDA, MPU_SCL, GPIO_PULLUP_ENABLE, GPIO_PULLUP_ENABLE, 100000); |
|
|
|
|
mpu_ = new mpud::MPU(*mpu_bus_); |
|
|
|
|
|
|
|
|
|
esp_err_t ret; |
|
|
|
|
mpu_->setAuxI2CBypass(false); |
|
|
|
|
ret = mpu_->testConnection(); |
|
|
|
|
if (ret != ESP_OK) { |
|
|
|
|
uint8_t wai = mpu_->whoAmI(); |
|
|
|
@ -80,27 +81,16 @@ void MPU::Calibrate() {
@@ -80,27 +81,16 @@ void MPU::Calibrate() {
|
|
|
|
|
|
|
|
|
|
void MPU::GetData(MpuData &data) { |
|
|
|
|
esp_err_t ret; |
|
|
|
|
// uint8_t mxh, mxl, myh, myl, mzh, mzl, n;
|
|
|
|
|
xSemaphoreTake(i2c_mutex, portMAX_DELAY); |
|
|
|
|
if (!xSemaphoreTake(i2c_mutex, pdMS_TO_TICKS(10))) return; |
|
|
|
|
ret = mpu_->motion(&accel_, &gyro_); |
|
|
|
|
uint8_t compass_data[7]; |
|
|
|
|
mpu_->setAuxI2CBypass(true); |
|
|
|
|
mpu_bus_->readBytes(mpud::COMPASS_I2CADDRESS, 0x03, 7, compass_data); |
|
|
|
|
mpu_->setAuxI2CBypass(false); |
|
|
|
|
// 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); |
|
|
|
|
if (ret != ESP_OK) { |
|
|
|
|
ESP_LOGE(TAG, "error reading MPU"); |
|
|
|
|
} |
|
|
|
|
// 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);
|
|
|
|
|
int16_t mx = (static_cast<int16_t>(compass_data[1]) << 8) | |
|
|
|
|
static_cast<int16_t>(compass_data[0]); |
|
|
|
|
int16_t my = (static_cast<int16_t>(compass_data[3]) << 8) | |
|
|
|
|