diff --git a/src/main.c b/src/main.c index 619d7fa..dcdc818 100644 --- a/src/main.c +++ b/src/main.c @@ -159,6 +159,28 @@ static bool do_mpu9250(struct mgos_mpu9250 *sensor) { return true; } +static bool do_imu(struct mgos_imu *sensor) { + float ax, ay, az; + float gx, gy, gz; + float mx, my, mz; + + if (!sensor) { + return false; + } + mgos_imu_read(sensor); + + if (mgos_imu_get_accelerometer(sensor, &ax, &ay, &az)) { + LOG(LL_INFO, ("type=%s Accel X=%.2f Y=%.2f Z=%.2f", mgos_imu_get_magnetometer_name(sensor), ax, ay, az)); + } + if (mgos_imu_get_gyroscope(sensor, &gx, &gy, &gz)) { + LOG(LL_INFO, ("type=%s Gyro X=%.2f Y=%.2f Z=%.2f", mgos_imu_get_magnetometer_name(sensor), gx, gy, gz)); + } + if (mgos_imu_get_magnetometer(sensor, &mx, &my, &mz)) { + LOG(LL_INFO, ("type=%s Mag X=%.2f Y=%.2f Z=%.2f", mgos_imu_get_magnetometer_name(sensor), mx, my, mz)); + } + return true; +} + static bool do_baro(struct mgos_barometer *sensor) { float pressure, temperature; @@ -185,6 +207,7 @@ int main(int argc, char **argv, char **environ) { struct mgos_ccs811 * ccs811 = NULL; struct mgos_mpu9250 *mpu9250 = NULL; struct mgos_barometer *baro = NULL; + struct mgos_imu *imu = NULL; if (!mgos_i2c_open(I2CBUSNR)) { LOG(LL_ERROR, ("Cannot open I2C bus %u", I2CBUSNR)); @@ -211,6 +234,7 @@ int main(int argc, char **argv, char **environ) { */ + /* if (!(mpu9250 = mgos_mpu9250_create(i2c, 0x68))) { LOG(LL_ERROR, ("Cannot create MPU9250 device")); } else { @@ -219,6 +243,17 @@ int main(int argc, char **argv, char **environ) { mgos_mpu9250_set_magnetometer_scale(mpu9250, SCALE_14_BITS); mgos_mpu9250_set_magnetometer_speed(mpu9250, MAG_100_HZ); } + */ + if (!(imu=mgos_imu_create())) { + LOG(LL_ERROR, ("Cannot create IMU")); + } else { + if (!mgos_imu_create_accelerometer_i2c(imu, i2c, 0x68, ACC_MPU9250)) + LOG(LL_ERROR, ("Cannot create accelerometer on IMU")); + if (!mgos_imu_create_gyroscope_i2c(imu, i2c, 0x68, GYRO_MPU9250)) + LOG(LL_ERROR, ("Cannot create gyroscope on IMU")); + if (!mgos_imu_create_magnetometer_i2c(imu, i2c, 0x0C, MAG_AK8963)) + LOG(LL_ERROR, ("Cannot create magnetometer on IMU")); + } if (!(baro=mgos_barometer_create_i2c(i2c, 0x76, BARO_BME280))) { LOG(LL_ERROR, ("Cannot create barometer")); @@ -234,6 +269,7 @@ int main(int argc, char **argv, char **environ) { do_ccs811(ccs811); do_mpu9250(mpu9250); do_baro(baro); + do_imu(imu); sleep(1); }