Pour utiliser le capteur de l’accéléromètre, instanciez un objet Accelerometer et enregistrez-vous pour recevoir les événements
update
qu’il distribue. Un événement
update
est un objet d’événement Accelerometer. L’événement possède quatre propriétés, toutes numériques :
-
accelerationX
: accélération le long de l’axe x, mesurée en g. L’axe x traverse le périphérique de gauche à droite lorsque l’utilisateur le tient droit. (La partie supérieure du périphérique est alors orientée vers le haut.) L’accélération est positive si le périphérique se déplace vers la droite.
-
accelerationY
: accélération le long de l’axe y, mesurée en g. L’axe y traverse le périphérique de bas en haut lorsque l’utilisateur le tient droit. (La partie supérieure du périphérique est alors orientée vers le haut.) L’accélération est positive si le périphérique se déplace vers le haut par rapport à cet axe.
-
accelerationZ
: accélération le long de l’axe z, mesurée en g. L’axe z est perpendiculaire à la face du périphérique. L’accélération est positive si vous déplacez le périphérique de sorte que sa face soit orientée vers le haut. L’accélération est négative si la face du périphérique est orientée vers le sol.
-
timestamp
: nombre de millisecondes au moment où se produit l’événement après l’initialisation du moteur d’exécution.
1 g correspond à l’accélération standard due à la gravité, soit environ 9,8 m/s
2
.
Exemple de base qui affiche les données de l’accéléromètre dans un champ de texte :
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()
}
Pour exploiter cet exemple, veillez à créer le champ de texte
accTextField
et à l’ajouter à la liste d’affichage avant d’utiliser le code.
Vous pouvez ajuster l’intervalle de temps qui sépare les événements de l’accéléromètre en appelant la méthode
setRequestedUpdateInterval()
de l’objet Accelerometer. Cette méthode ne gère qu’un seul paramètre,
interval
, qui correspond à la fréquence de mise à jour requise, en millisecondes :
var accl:Accelerometer;
accl = new Accelerometer();
accl.setRequestedUpdateInterval(1000);
L’intervalle réel entre les mises à jour de l’accéléromètre peut être supérieur ou inférieur à cette valeur. Toute modification de l’intervalle de mise à jour affecte l’ensemble des écouteurs enregistrés. Si vous n’appelez pas la méthode
setRequestedUpdateInterval()
, l’application reçoit des mises à jour à la fréquence définie par défaut sur le périphérique.
Les données de l’accéléromètre ne sont pas d’une précision absolue. Vous pouvez calculer la moyenne mobile des données récentes pour lisser les données. Ainsi, l’exemple suivant prend en compte les données récentes issues de l’accéléromètre et les données en cours pour arrondir le résultat :
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));
}
Le calcul de la moyenne mobile n’est toutefois désirable que si la fréquence de mise à jour de l’accéléromètre est élevée.