이준빈은 호박머리

IT 프로그래밍 개발 정보 블로그, 이준빈은 호박머리 입니다.

Language/Android

안드로이드 가속센서와 자이로스코프 센서(Android Accelerometer sensor & Gyroscope sensor)

준콩이 2014. 6. 20. 11:53
반응형


안드로이드 개발 시 각종 센서의 상태값이나 수치를 이용하는 예제입니다.


안드로이드는 조도센서, 온도센서 ,가속센서 등 여러 센서들이 내장되어 있습니다.

이런 센서들을 이용한 예제 소스입니다.


아래 소스는 가속센서(엑셀러로미터 : accelerometer)와 자이로스코프(gyroscope)에 대한 예제입니다.


package com.example.dominosdiy;
 
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
 
public class MainActivity4 extends Activity implements SensorEventListener {
 
 
    int accelXValue;
    int accelYValue;
    int accelZValue;
 
    int gyroX;
    int gyroY;
    int gyroZ;
 
    private SensorManager mSensorManager;
    private Sensor mGyroscope;
    private Sensor accSensor;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
         
        //센서 매니저 얻기
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        //자이로스코프 센서(회전)
        mGyroscope = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
        //엑셀러로미터 센서(가속)
        accSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
 
 
    }
    //정확도에 대한 메소드 호출 (사용안함)
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
 
    }
     
     
    //센서값 얻어오기
    public void onSensorChanged(SensorEvent event) {
        Sensor sensor = event.sensor;
 
        if (sensor.getType() == Sensor.TYPE_GYROSCOPE) {
            gyroX = Math.round(event.values[0] * 1000);
            gyroY = Math.round(event.values[1] * 1000);
            gyroZ = Math.round(event.values[2] * 1000);
            System.out.println("gyroX ="+gyroX);
            System.out.println("gyroY ="+gyroY);
            System.out.println("gyroZ ="+gyroZ);
             
        }
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
            accelXValue = (int) event.values[0];
            accelYValue = (int) event.values[1];
            accelZValue = (int) event.values[2];
            System.out.println("accelXValue="+accelXValue);
            System.out.println("accelYValue="+accelYValue);
            System.out.println("accelZValue="+accelZValue);
    }
 
    // 주기 설명
    // SENSOR_DELAY_UI 갱신에 필요한 정도 주기
    // SENSOR_DELAY_NORMAL 화면 방향 전환 등의 일상적인  주기
    // SENSOR_DELAY_GAME 게임에 적합한 주기
    // SENSOR_DELAY_FASTEST 최대한의 빠른 주기
 
     
    //리스너 등록
    protected void onResume() {
        super.onResume();
        mSensorManager.registerListener(this, mGyroscope,SensorManager.SENSOR_DELAY_FASTEST);
        mSensorManager.registerListener(this, accSensor,SensorManager.SENSOR_DELAY_FASTEST);
    }
     
    //리스너 해제
    protected void onPause() {
        super.onPause();
        mSensorManager.unregisterListener(this);
    }
}


반응형