我有一个简单的应用程序,可以读取加速器值(对于 x、y 和 z 轴)。但对于某些值(value),我以编程方式振动我的手机。因此,每当振动发生时,加速度计值都会在范围内上下波动。我想避免这种情况。请告诉我如何防止加速度计在振动模式下给出不同的结果。
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER)
return;
switch (mDisplay.getRotation()) {
case Surface.ROTATION_0:
x = event.values[0];
y = event.values[1];
break;
case Surface.ROTATION_90:
x = -event.values[1];
y = event.values[0];
Log.i("ROT: ", "90");
break;
case Surface.ROTATION_180:
x = -event.values[0];
y = -event.values[1];
break;
case Surface.ROTATION_270:
x = event.values[1];
y = -event.values[0];
break;
}
}
谢谢。
最佳答案
您可以使用低通滤波器,这样您就可以滤除高振动。 像这样:
float lastAccel[] = new float[3];
float accelFilter[] = new float[3];
accelFilter[0] = (float) (alpha * (accelFilter[0] + accelX - lastAccel[0]));
accelFilter[1] = (float) (alpha * (accelFilter[1] + accelY - lastAccel[1]));
accelFilter[2] = (float) (alpha * (accelFilter[2] + accelZ - lastAccel[2]));
关于android - 振动使加速度计给出错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8755971/