我的LinearAcceleration传感器非常奇怪。即使我跑步,停止,跑步,走路,跑步,停止,走路......用我的手机,传感器给我的反应很少,低于0.1值。但是当我稍微改变我的手机角度(倾斜)时,有时候我的手移动时,数值变为3,4甚至5。我检查了我的加速度计,它显示了所有三个正轴上的近似引力(如9.7),并且在它们的负侧(如-10 m / s ^ 2)稍微强一点。所以它可能正在发挥作用。无法弄清楚出了什么问题。
例如,当我将Y轴上的所有LinearAcceleration传感器值添加到OnSensorChanged函数上的变量(如v = v + e.Values[ 1 ];
)时,它从0开始并保持在它周围,当我将倾斜度更改为90°时,它显示为价值像30,并留在它周围。任何帮助,将不胜感激。提前致谢!基本上我总结了每个传感器变化时水平方向上的所有加速度,而不是每0.1秒平均一次。如果它大于我的阈值0.1米/秒^ 2,我将它添加到我的速度,但是当我的问题出现时,我的速度几乎不会改变,当我跑,停,跑,走,跑,停,当我改变手中手机的倾斜度时,它会改变2-5分。
这是我的代码:
public void OnSensorChanged( SensorEvent e )
{
TextView textview2 = FindViewById<TextView>( Resource.Id.textView2 );
TextView textview1 = FindViewById<TextView>( Resource.Id.textView1 );
double aci = 0;
lock( syncLock )
{
if( e.Sensor.Type==SensorType.Accelerometer )
{
aci = Math.Atan2( e.Values[ 1 ] , e.Values[ 2 ] );
textview1.Text = "Phone tilt : " + ((int)( ( Math.Atan2( e.Values[ 1 ] , e.Values[ 2 ] ) ) * 180 / Math.PI )).ToString() + " °";
}
if( e.Sensor.Type==SensorType.LinearAcceleration )
{
ivme = ivme + e.Values[1]* Math.Cos( aci )+e.Values[2]*Math.Sin(aci);
counta++;
textview2.Text = "Linear acceleration : " + ((int)( e.Values[ 1 ] * Math.Cos( aci ) + e.Values[ 2 ] * Math.Sin( aci ) )).ToString();
}
}
}
private void yapbisiler( object sender , ElapsedEventArgs e )
{
if( counta != 0 )
{
if( Math.Abs( ivme/counta ) > 0.1 )
{
velocity = velocity + (ivme/counta) * 0.1;
RunOnUiThread( () => {
TextView textview3 = FindViewById<TextView>( Resource.Id.textView3 );
textview3.Text = "Speed : "+ (int)velocity + " meters/second";
} );
}
}
if( Math.Abs(velocity) >0.1 )
{
displacement = displacement + velocity * 0.1;
}
RunOnUiThread( () => {
TextView textview4 = FindViewById<TextView>( Resource.Id.textView4 );
textview4.Text = "Displacement : " + (int)displacement + " meters";
} );
counta = 0;
ivme = 0;
}
protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle);
t.Interval = 100;
t.Elapsed += yapbisiler;
t.Start();
sensorManager = ( SensorManager )GetSystemService( SensorService );
}