Ejemplo n.º 1
0
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;
	}
}
Ejemplo n.º 2
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);
}