线性加速度传感器值在倾斜变化时会发生剧烈变化

时间:2017-04-28 18:22:48

标签: c# android sensor android-sensors

我的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 );

}

0 个答案:

没有答案