是否可以说,让加速度计每秒更新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;
然后将其打印到屏幕上
这不是一个复杂的方法,但我无法弄清楚它为何如此不准确。
答案 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
不要忘记,当放在桌子上时,由于重力和正常