Add mgos_imu module!

This commit is contained in:
Pim van Pelt
2018-05-13 15:47:06 +02:00
parent 449d51aae8
commit 646f21833f

View File

@ -159,6 +159,28 @@ static bool do_mpu9250(struct mgos_mpu9250 *sensor) {
return true; 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) { static bool do_baro(struct mgos_barometer *sensor) {
float pressure, temperature; float pressure, temperature;
@ -185,6 +207,7 @@ int main(int argc, char **argv, char **environ) {
struct mgos_ccs811 * ccs811 = NULL; struct mgos_ccs811 * ccs811 = NULL;
struct mgos_mpu9250 *mpu9250 = NULL; struct mgos_mpu9250 *mpu9250 = NULL;
struct mgos_barometer *baro = NULL; struct mgos_barometer *baro = NULL;
struct mgos_imu *imu = NULL;
if (!mgos_i2c_open(I2CBUSNR)) { if (!mgos_i2c_open(I2CBUSNR)) {
LOG(LL_ERROR, ("Cannot open I2C bus %u", 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))) { if (!(mpu9250 = mgos_mpu9250_create(i2c, 0x68))) {
LOG(LL_ERROR, ("Cannot create MPU9250 device")); LOG(LL_ERROR, ("Cannot create MPU9250 device"));
} else { } 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_scale(mpu9250, SCALE_14_BITS);
mgos_mpu9250_set_magnetometer_speed(mpu9250, MAG_100_HZ); 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))) { if (!(baro=mgos_barometer_create_i2c(i2c, 0x76, BARO_BME280))) {
LOG(LL_ERROR, ("Cannot create barometer")); LOG(LL_ERROR, ("Cannot create barometer"));
@ -234,6 +269,7 @@ int main(int argc, char **argv, char **environ) {
do_ccs811(ccs811); do_ccs811(ccs811);
do_mpu9250(mpu9250); do_mpu9250(mpu9250);
do_baro(baro); do_baro(baro);
do_imu(imu);
sleep(1); sleep(1);
} }