펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO

기본적인 셋팅은 이전에 방위센서에서 다뤘으므로 주석없이 술술 나가겠음


float[] gravity_data = new float[3];

float[] accel_data = new float[3];

float[] m_acc_data = new float[3];

 final float alpha = (float)0.8;


SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);

Sensor mSensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);


protected void onResume(){

super.onResume();

sm.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_UI);

}


public void onDestroy(){

super.onDestroy();

sm.unregisterListener(this);

}


@Override

public void onSensorChanged(SensorEvent event) {

if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {

gravity_data[0] = alpha * gravity_data[0] + (1 - alpha) * event.values[0]; //먼저 중력데이터를 계산함

gravity_data[1] = alpha * gravity_data[1] + (1 - alpha) * event.values[1];

gravity_data[2] = alpha * gravity_data[2] + (1 - alpha) * event.values[2];

accel_data[0] = event.values[0] - gravity_data[0]; // 순수 가속도센서값에 중력값을 빼줌

accel_data[1] = event.values[1] - gravity_data[1]; // 아니면 약 9.81 어쩌고 하는값이 더해짐

accel_data[2] = event.values[2] - gravity_data[2];

tv1.setText("x축 : " + accel_data[0]);

tv2.setText("y축 : " + accel_data[1]);

tv3.setText("z축 : " + accel_data[2]);

}

}


빼먹은게 있을수도 있지만, 알맹이는 다 들어있습니다. 문의는 댓글로