Per utilizzare il sensore accelerometro, create l'istanza di un oggetto Accelerometer ed effettuate la registrazione per gli eventi
update
che invia. L'evento
update
è un oggetto evento Accelerometer. L'evento dispone di quattro proprietà ciascuna delle quali sono numeri:
-
accelerationX
: accelerazione lungo l'asse x misurata in g. L'asse x va da sinistra a destra del dispositivo quando questo si trova in posizione verticale. (Il dispositivo si trova in posizione verticale quando la parte superiore del dispositivo è rivolta verso l'alto.) L'accelerazione è positiva se il dispositivo si sposta verso destra.
-
accelerationY
: accelerazione lungo l'asse y misurata in g. L'asse y va dal basso verso l'alto del dispositivo quando questo si trova posizione verticale. (Il dispositivo si trova in posizione verticale quando la parte superiore del dispositivo è rivolta verso l'alto.) L'accelerazione è positiva se il dispositivo si sposta verso l'alto rispetto a questo asse.
-
accelerationZ
: accelerazione lungo l'asse z misurata in g. L'asse Z è perpendicolare alla faccia del dispositivo. L'accelerazione è positiva se il dispositivo viene spostato in modo che la sua faccia sia rivolta verso l'alto. L'accelerazione è negativa se la sua faccia è rivolta verso terra.
-
timestamp
: il numero di millisecondi al momento dell'evento da quando il runtime è stato inizializzato.
1 g è l'accelerazione standard dovuta alla forza di gravità, circa 9,8 m/sec
2
.
L'esempio di base riportato di seguito visualizza i dati accelerometro in un campo di testo:
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()
}
Per utilizzare questo esempio, accertatevi di creare il campo di testo
accTextField
e di aggiungerlo all'elenco di visualizzazione prima di utilizzare questo codice.
Potete regolare l'intervallo di tempo desiderato per gli eventi accelerometro chiamando il metodo
setRequestedUpdateInterval()
dell'oggetto Accelerometer. Questo metodo accetta un solo parametro,
interval
, che corrisponde all'intervallo di aggiornamento richiesto in millisecondi:
var accl:Accelerometer;
accl = new Accelerometer();
accl.setRequestedUpdateInterval(1000);
L'intervallo effettivo tra gli aggiornamenti dell'accelerometro può essere maggiore o minore di questo valore. Qualsiasi modifica dell'intervallo di aggiornamento ha effetto su tutti i listener registrati. Se non chiamate il metodo
setRequestedUpdateInterval()
, l'applicazione riceve gli aggiornamenti in base all'intervallo predefinito del dispositivo.
I dati dell'accelerometro presentano un certo livello di imprecisione. Potete utilizzare una media mobile di dati recenti per uniformare i dati. Nell'esempio seguente viene eseguita la fattorizzazione di letture accelerometro recenti con la lettura attuale per ottenere un risultato arrotondato:
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));
}
Tuttavia, questa media mobile è consigliabile solo se l'intervallo di aggiornamento dell'accelerometro è piccolo.