uint8_t mpu_set_sample_rate(uint16_t rate){ uint8_t data; // センサー使用しない場合は終了 if (!(mpu9250_st.sensors)) return -1; if (mpu9250_st.dmp_on){ return -1; } else { // ローパワーモード?とりあえずマスク #if 0 if (mpu9250_st.lp_accel_mode) { if (rate && (rate <= 40)) { /* Just stay in low-power accel mode. */ mpu_lp_accel_mode(rate); return 0; } /* Requested rate exceeds the allowed frequencies in LP accel mode, * switch back to full-power mode. */ mpu_lp_accel_mode(0); } #endif // 上下限カット if (rate < 4) rate = 4; else if (rate > 1000) rate = 1000; // レジスタ書き込み値に変換 data = 1000 / rate - 1; // レジスタ書き込み if (mpu9250_writes(MPU6500_RATE_DIV, 1, &data)) return -1; // 値の保存 mpu9250_st.sample_rate = 1000 / (1 + data); #ifdef USE_AK8963 mpu_set_compass_sample_rate(min(mpu9250_st.compass_sample_rate, MAX_COMPASS_SAMPLE_RATE)); #endif /* Automatically set LPF to 1/2 sampling rate. */ mpu_set_lpf(mpu9250_st.sample_rate >> 1); return 0; } }
// Accelerometer Low-Power Mode. Rate options: // 1.25 (1), 2.5 (2), 5, 10, 20, 40, // 80, 160, 320, or 640 Hz // Disables compass and gyro inv_error_t MPU9250_DMP::lowPowerAccel(unsigned short rate) { return mpu_lp_accel_mode(rate); }