振动使加速度计给出错误的值

时间:2012-01-06 09:47:45

标签: android

我有一个简单的应用程序,可以读取加速度计值(对于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;
            }
}

感谢。

2 个答案:

答案 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)

我认为在振动手机时你会被迫忽略加速度值。