有没有办法强制加速度计定期更新?

时间:2011-07-28 09:26:54

标签: android accelerometer average

是否可以说,让加速度计每秒更新50次?我想这样做的原因是我想让加速度计运行,收集它记录的所有不同值,然后返回平均值。

我最初试图收集所有不同的值

 yAverage = yAverage + new y; 

然后将其除以记录不同录音数量的计数器。

 counter++;

这两行代码都在“onSensorChanged”方法中,并且总是一起执行(如果执行另一行也会一直执行)

然而,我得到的结果非常不一致。如果我将电话平放在桌子上,它将计算几乎随机的平均值,即使传感器值永远不会改变,并且应始终返回相同的值。

有更好的方法来计算平均值吗?

我不知道这是否重要,但我使用浮动来存储记录的值并进行计算。

回应谢里夫: 好吧,其中没有真正那么多的代码,我有3个浮点值,从而获得acclerometer的值,如下所示:

 y=event.values[1];

,它位于SensorEventListener内的“onSensorChanged”方法内。

我认为伪代码会是这样的:

 float yAverage = 0

 onSensorChanged{
    float y = event.values[1];
    if (y < 0){
       y = y * -1;
    }
    yAverage = yAverage + y;
    counter++;
 }

然后用另一种方法计算;

 yAverage = yAverage / counter;

然后将其打印到屏幕上

这不是一个复杂的方法,但我无法弄清楚它为何如此不准确。

1 个答案:

答案 0 :(得分:1)

我不知道它是否是执行错误,但我认为这是一个逻辑错误

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
Sensor mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
public void onSensorChanged(SensorEvent event) {
    float y = event.values[1];
    if (y < 0){
        y = y * -1;
    }
yAverage = yAverage + y;
counter++; 
}

要点:

  • 确保yAverage为全局

  • 确保您使用的是TYPE_ACCELEROMETER

  • 不要忘记,当放在桌子上时,由于重力和正常

  • ,您将获得较高的值[1]值