가속도계 센서를 사용하려면 Accelerometer 객체를 인스턴스화하고 이 객체가 전달하는 update 이벤트에 대해 등록합니다. update 이벤트는 Accelerometer 이벤트 객체로서 네 가지 속성을 가지며 모두 숫자 값입니다.
accelerationX - X축을 기준으로 한 가속 값(g 단위)입니다. X축은 바로 선 위치일 때 장치의 왼쪽에서 오른쪽으로 진행합니다. 바로 선 위치는 장치의 윗면이 위를 향하는 경우를 가리킵니다. 장치가 오른쪽을 향해 움직일 경우 가속은 양수입니다.
accelerationY - Y축을 기준으로 한 가속 값(g 단위)입니다. Y축은 바로 선 위치일 때 장치의 아래쪽에서 위쪽으로 진행합니다. 바로 선 위치는 장치의 윗면이 위를 향하는 경우를 가리킵니다. 장치가 이 축을 기준으로 위쪽으로 움직일 경우 가속은 양수입니다.
accelerationZ - Z축을 기준으로 한 가속 값(g 단위)입니다. Z축은 장치 면과 직각을 이룹니다. 장치의 윗면이 위를 향하도록 움직일 경우 가속은 양수입니다. 장치의 윗면이 아래를 향할 경우 가속은 음수입니다.
timestamp - 런타임이 초기화된 이후 이벤트가 발생하는 시점의 밀리초입니다.
1g는 중력으로 인한 표준 가속도로, 대략 9.8m/sec2.입니다.
다음은 텍스트 필드에 가속도계 데이터를 표시하는 기본적인 예제입니다.
var accl:Accelerometer;
if (Accelerometer.isSupported)
{
accl = new Accelerometer();
accl.addEventListener(AccelerometerEvent.UPDATE, updateHandler);
}
else
{
accTextField.text = "Accelerometer feature not supported";
}
function updateHandler(evt:AccelerometerEvent):void
{
accTextField.text = "acceleration X: " + evt.accelerationX.toString() + "\n"
+ "acceleration Y: " + evt.accelerationY.toString() + "\n"
+ "acceleration Z: " + evt.accelerationZ.toString()
}
이 예제 코드를 사용하려면 먼저 accTextField 텍스트 필드를 만들어 표시 목록에 추가해야 합니다.
Accelerometer 객체의 setRequestedUpdateInterval() 메서드를 호출하여 가속도계 이벤트의 원하는 시간 간격을 조정할 수 있습니다. 이 메서드는 interval 매개 변수 하나를 사용합니다. 이 매개 변수는 밀리초 단위의 요청된 업데이트 간격입니다.
var accl:Accelerometer;
accl = new Accelerometer();
accl.setRequestedUpdateInterval(1000);
가속도계 업데이트의 실제 시간 간격은 이 값보다 크거나 작을 수 있습니다. 업데이트 간격을 변경하면 등록된 모든 리스너에 영향을 줍니다. setRequestedUpdateInterval() 메서드를 호출하지 않으면 응용 프로그램에서 장치의 기본 간격에 따라 업데이트를 받습니다.
가속도계 데이터는 어느 정도 부정확할 수 있습니다. 최근 데이터 이동 평균을 이용하여 가속도계 데이터를 다듬을 수 있습니다. 다음 예제와 같이 현재 판독값에 최근 가속도계 판독값을 고려하여 반올림한 결과를 얻을 수 있습니다.
var accl:Accelerometer;
var rollingX:Number = 0;
var rollingY:Number = 0;
var rollingZ:Number = 0;
const FACTOR:Number = 0.25;
if (Accelerometer.isSupported)
{
accl = new Accelerometer();
accl.setRequestedUpdateInterval(200);
accl.addEventListener(AccelerometerEvent.UPDATE, updateHandler);
}
else
{
accTextField.text = "Accelerometer feature not supported";
}
function updateHandler(event:AccelerometerEvent):void
{
accelRollingAvg(event);
accTextField.text = rollingX + "\n" + rollingY + "\n" + rollingZ + "\n";
}
function accelRollingAvg(event:AccelerometerEvent):void
{
rollingX = (event.accelerationX * FACTOR) + (rollingX * (1 - FACTOR));
rollingY = (event.accelerationY * FACTOR) + (rollingY * (1 - FACTOR));
rollingZ = (event.accelerationZ * FACTOR) + (rollingZ * (1 - FACTOR));
}
그러나 이러한 이동 평균은 가속도계 업데이트 간격이 작은 경우에만 사용하는 것이 좋습니다.