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

问题描述 投票:0回答:1

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

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

 yAverage = yAverage + new y; 

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

 counter++;

这两行代码都在“onSensorChanged”方法中,并且将始终一起执行(如果执行另一行,则也将执行而不会失败)

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

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

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

对谢里夫的回应:好吧,其中没有太多的代码,我有3个浮点值,可以从加速度计得到这样的值:

 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;

然后将其打印到屏幕上

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

android accelerometer average
1个回答
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]的高值
© www.soinside.com 2019 - 2024. All rights reserved.