안드로이드 센서 + 자이로스코프

2014. 6. 16. 20:43Mobile/Android



반응형

안드로이드 센서 + 자이로스코프 

각종 센서들을 이용해서 응용하는 프로그램을 만들어 봅시다.




안드로이드 기기에서 가속센서, 온도센서 ,조도센서 등 여라가지 센서들이 있습니다. 이런한 센서들을 이용하여 게임등 공통된 부분을 살펴보자. 가속 이랑 자이로스코프에대해 살펴보자


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);
	}
}


끝~

반응형