2012-01-06 54 views
3

我有一個簡單的應用程序,它讀取加速計值(對於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; 
      } 
} 

謝謝。

回答

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])); 
+0

嗨,感謝您的回覆。但我不知道如何實現它。我對加速度計的東西很陌生。從哪裏獲取accelFilter [0]值,最後它是如何影響x,y和z值的。那些x,y和z值來自event.values [0]等。抱歉,但我很困惑。 – 2012-01-06 10:18:03

+0

accelFilter和lastAccel是空變量... alpha是0.1和0.9之間的係數...我用sugest來使用0.1 ...和accelX是你的加速度。在accelFilter [0]中將存儲加速度計的新值。 – 2012-01-06 10:21:14

+0

嗨,我跟着這個網址來尋找低過濾器,但問題仍然存在。 http://developer.android.com/reference/android/hardware/SensorEvent.html謝謝 – 2012-01-06 10:39:32

0

我認爲你會被迫忽略加速度值,同時振動手機。

+0

嗨,謝謝。你能否詳細說明一下。我在數小時後發現問題,只有在振動模式下,數值纔會上下閃爍。我如何忽略加速度值。 – 2012-01-06 09:53:23