Akselerometre sensörünü kullanmak için, Accelerometer nesnesini somutlaştırın ve gönderdiği
update
olaylarına kaydolun.
update
olayı bir Accelerometer olayı nesnesidir. Bu olay dört özelliğe sahiptir ve bunların her biri sayıdır:
-
accelerationX
—g cinsinden ölçülen, x ekseni boyunca ivme. X ekseni, aygıt dik konumdayken aygıtın solundan sağına doğru gider. (Cihazın tepesi dönükken cihaz dik konumdadır.) Aygıt sağa doğru hareket ederse, ivme pozitiftir.
-
accelerationY
—g cinsinden ölçülen, y ekseni boyunca ivme. Y ekseni, aygıt dik konumdayken aygıtın üstünden altına doğru gider. (Cihazın tepesi dönükken cihaz dik konumdadır.) Aygıt bu eksene göre yukarı doğru hareket ederse, ivme pozitiftir.
-
accelerationZ
—g cinsinden ölçülen, z ekseni boyunca ivme. Z ekseni, aygıtın önüne dikey olarak gider. Aygıtı, yüzü yukarıya dönecek şekilde hareket ettirirseniz, ivme pozitiftir. Aygıtın yüzü zemine bakıyorsa, ivme negatiftir.
-
timestamp
—Çalışma zamanının başlatılmasından olay zamanına kadar geçen milisaniye sayısı.
1 g, yerçekiminden kaynaklanan standart ivmedir ve yaklaşık 9,8 m/sn
2.
değerine karşılık gelir.
Aşağıda bir metin alanında akselerometre verilerini gösteren basit bir örnek verilmektedir:
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()
}
Bu örneği kullanmak için,
accTextField
metin alanını oluşturup bu kodu kullanmadan önce ekran listesine eklemeyi unutmayın.
Accelerometer nesnesinin
setRequestedUpdateInterval()
yöntemini çağırarak akselerometre için istenilen zaman aralığını ayarlayabilirsiniz. Bu yöntemin çağırdığı tek parametre, milisaniye cinsinden talep edilen güncelleme aralığı olan
interval
parametresidir:
var accl:Accelerometer;
accl = new Accelerometer();
accl.setRequestedUpdateInterval(1000);
Akselerometre güncellemeleri arasındaki asıl süre bu değerden daha büyük veya daha az olabilir. Güncelleme aralığındaki herhangi bir değişiklik tüm kayıtlı dinleyicileri etkiler.
setRequestedUpdateInterval()
yöntemini çağırmazsanız, uygulama aygıtın varsayılan aralığına göre güncelleme alır.
Akselerometre verileri bir miktar hata payına sahiptir. Verileri düzeltmek için yeni verilerin hareketli bir ortalamasını kullanabilirsiniz. Örneğin, aşağıdaki örnekte akselerometre okumaları yuvarlak bir sonuç elde etmek üzere geçerli okumayla çarpılır:
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));
}
Ancak, bu hareketli ortalama yalnızca akselerometre güncelle aralığı küçükse arzu edilir niteliktedir.