2016-06-18 2 views
0

휴대 전화의 자이로에서 데이터를 가져 오려고합니다. 지금까지 각도가 계속 변경되는 것은 휴대 전화를 움직이는 각도에 따라 다릅니다. 그러나android에서 방향 센서를 보정하는 방법

, 예를 들어, 방위각, 나는 내가 시작하지 북쪽 방향에서의 위치에서 계산을 시작하려면 -> 내가이 0

내 질문에서 시작 할 수 있습니다 : 어떻게 나는 자이로에서 얻은 첫 번째 데이터를 저장하므로 휴대 전화를 움직일 때 나머지 데이터에서 "마이너스"를 할 수 있습니까? 코드는 다음과 같습니다

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    sm=(SensorManager)getSystemService(Context.SENSOR_SERVICE); 
    rotationvector=sm.getDefaultSensor(Sensor.TYPE_ORIENTATION); 
    sm.registerListener(this,rotationvector,SensorManager.SENSOR_DELAY_NORMAL); 

    rotationx=(TextView)findViewById(R.id.rotationx); 
    rotationy=(TextView)findViewById(R.id.rotationy); 
    rotationz=(TextView)findViewById(R.id.rotationz); 


} 
@Override 
public void onSensorChanged(SensorEvent event) { 


    rotationx.setText(" " +event.values[0]); 
    rotationy.setText(" " +event.values[1]); 
    rotationz.setText(" " +event.values[2]); 

} 

내가하고 싶은 것을하는 것은 같은 것입니다 :

rotationx.setText(" " +event.values[0]-FirstAzimuthValue); 

감사합니다!

새로운 코드 :

private boolean isFirstMeasure = true; 
private float FirstAzimuthValue = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    sm=(SensorManager)getSystemService(Context.SENSOR_SERVICE); 
    rotationvector=sm.getDefaultSensor(Sensor.TYPE_ORIENTATION); 
    sm.registerListener(this,rotationvector,SensorManager.SENSOR_DELAY_NORMAL); 

    rotationx=(TextView)findViewById(R.id.rotationx); 
    rotationy=(TextView)findViewById(R.id.rotationy); 
    rotationz=(TextView)findViewById(R.id.rotationz); 

} 
@Override 
public void onSensorChanged(SensorEvent event) { 

    if (isFirstMeasure){ 
     FirstAzimuthValue - event.values[0]; //error this line 
     isFirstMeasure = false; 
    } 

    rotationx.setText(" " +(event.values[0] - FirstAzimuthValue)); 
    rotationy.setText(" " +event.values[1]); 
    rotationz.setText(" " +event.values[2]); 

} 
+1

가에서 onCreate 함수에서 각도를 확인하고 firstazimuthvalue라는 변수에 저장하지, 다음 이봐 .. – DAVIDBALAS1

답변

1

이유는 단지

private boolean isFirstMeasure = true; 
private float firstAzimuthValue = 0; 

// ... 

@Override 
public void onSensorChanged(SensorEvent event) { 
    if (isFirstMeasure) { 
     firstAzimuthValue = event.values[0]; 
     isFirstMeasure = false; 
    } 

    rotationx.setText(" " + (event.values[0] - firstAzimuthValue)); 
    rotationy.setText(" " +event.values[1]); 
    rotationz.setText(" " +event.values[2]); 
} 
+0

당신이 원하는 무엇이든 함께 할 안토니오, 내가 말했던 것을 해보려고했는데, 문제는 2 가지입니다. 1) if 문에서 "진술이 아닙니다"라고 말합니다. 2) rotationx에서 뜨면 "빼기"를하지 말라. – Ben

+0

내 편집으로 두 번째 문제가 해결되었습니다 (실수). 첫 번째 문제는 오해입니다. 새 코드를 게시 할 수 있습니까? – antonio

+0

오자가 수정되었습니다. 다시 시도하십시오. 죄송합니다 – antonio

관련 문제