我有一个简单的应用程序,可以读取加速度计值(对于x,y和z轴)。但对于某些价值,我会以编程方式振动我的手机。因此,每当发生振动时,加速度计值在范围内上下闪烁。我想避免这种情况。请告诉我如何在振动模式下防止加速度计产生不同的结果。
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;
}
}
感谢。
答案 0 :(得分:1)
您可以使用低通滤波器,以便可以过滤高振动。 像这样:
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]));
答案 1 :(得分:0)
我认为在振动手机时你会被迫忽略加速度值。