Para utilizar o sensor de acelerômetro, instancie um objeto Accelerometer e registre para
atualizar
eventos enviados. O evento
update
é um objeto de evento Accelerometer. O evento possui quatro propriedades, são eles:
-
accelerationX
—Aceleração ao longo do eixo x, medida em g. O eixo x vai da esquerda para a direita do dispositivo quando está na posição perpendicular. (O dispositivo está na vertical quando o topo do dispositivo está voltado para cima). A aceleração será positiva se o dispositivo for movido para a direita.
-
accelerationY
—Aceleração ao longo do eixo y, medida em g. O eixo y percorre a parte superior do dispositivo quando está na posição perpendicular. (O dispositivo está na vertical quando o topo do dispositivo está voltado para cima). A aceleração será positiva se o dispositivo for movido para cima deste eixo.
-
accelerationZ
—Aceleração ao longo do eixo z, medida em g. O eixo z corre perpendicularmente à parte fronta do dispositivo. A aceleração é positiva se você mover o dispositivo de forma que a face do dispositivo aponte para cima. A aceleração é negativa se a face do dispositivo apontar para o chão.
-
timestamp
—O número de milissegundos no momento do evento a partir do início da execução.
1 g é a aceleração padrão da gravidade, aproximadamente 9.8 m/s
2.
.
Este é um exemplo básico que exibe dados de um acelerômetro em um campo de texto:
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()
}
Para utilizar este exemplo, certifique-se de criar o campo de texto
accTextField
e adicioná-lo para a lista de exibição antes de utilizar este código.
Você pode ajustar o intervalo de tempo para eventos de acelerômetro chamando o método
setRequestedUpdateInterval()
do objeto Accelerometer. Este método usa um parâmetro
interval
, que é o intervalo de atualização solicitado em milisegundos:
var accl:Accelerometer;
accl = new Accelerometer();
accl.setRequestedUpdateInterval(1000);
A hora real entre atualizações do acelerômetro pode ser maior ou menor do que este valor. Qualquer mudança no intervalo de atualização afeta todos os ouvintes registrados. Se o método
setRequestedUpdateInterval()
não for chamado, o aplicativo recebe atualizações com base no intervalo padrão do dispositivo.
Dados do acelerômetro tem alguns graus de imprecisão. Você pode utilizar uma média de movimento de dados recentes para aperfeiçoar os dados. Por exemplo, o exemplo a seguir fatora leituras recentes do acelerômetro com a leitura atual para obter um resultado arredondado:
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));
}
No entanto, esta média de movimentação só é desejável se o intervalo de atualização do acelerômetro for pequeno.