Windows Phone Accelerometer Sensor Kullanımı

WindowsPhone cihazları 3 eksende ve m/sn2 cinsinden ivme ölçebilen sensöre sahiptir. Accelerometer isimli sınıfla temsil edilen bu sensör, Start() fonksiyonu çağrıldığı zaman okuduğu değerleri CurrentValueChanged isimli eventi raise ederek dış dünyaya iletir. Bu event uygun bir handler fonksiyon ile handle edilirse ikinci parametresi üzerinden (SensorReading.Acceleration property'si ile) sensör verileri elde edilebilir.

Sensörden veri okuma işlemi GUI thread'ten ayrı bir thread'te gerçekleştirildiği için event handler fonksiyonda GUI thread'e ait nesnelelere (örnekteki txt isimli TextBlock gibi) erişim cross thread operation hatası ile sonuçlanır. Bu nedenle elde edilen veriler kontrolün Dispatcher property'si ve bir callback fonksiyon yardımıyla kontrole yazılmıştır. 
 
public partial class MainPage : PhoneApplicationPage
 {
 private String sensorVerisi = "";
 
 public MainPage()
 {
 InitializeComponent();
 Accelerometer acc = new Accelerometer();
 acc.CurrentValueChanged += Acc_CurrentValueChanged;
 acc.Start();
 }

 private void Acc_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e)
 {
 sensorVerisi = "";
 sensorVerisi += "X:" + e.SensorReading.Acceleration.X + "\n\r";
 sensorVerisi += "Y:" + e.SensorReading.Acceleration.Y + "\n\r";
 sensorVerisi += "Z:" + e.SensorReading.Acceleration.Z + "\n\r";
 txt.Dispatcher.BeginInvoke(new Action(DisplayCallBack)); 
 }
 
 public void DisplayCallBack()
 {
 txt.Text = s;
 }
 }

Dikkat : Yeni SDK versiyonlarında ReadingChanged isimli event artık kullanılmamaktadır.

Kaynakça: Bahçeşehir Üniversitesi, WindowsPhone Programlama Dersi Notları, Aykut TAŞDELEN 2015
Reklamlar

Java ‘da Runnable Interface ile Threading

 Java ‘da Runnable Interface ile Multi Threading

Aşağıdaki kod örneği eğitimlerimde thread konusuna girerken verdiğim örnekten derlenmiştir. Amacı sadece Java’da bu konuya olan bakış açısını bir nebze yansıtmaktır.

public class Sample implements Runnable {

private String mesaj;

public void Func() {

for (;;) {

System.out.println(this.mesaj );

}

}

public void run() {

      Func();

}

public Sample(String msg )

{

      mesaj = msg;

}

public void Bar()

{

for (;;)

{

System.out.println(this.mesaj );

}

}

}

 …………………

public class test {

public static void main(String[] args) {

// bu şekilde denenirse sadece aykut yazar

/*

Sample smp = new Sample (“aykut”);

smp.run();

Sample smp2 = new Sample (“taşdelen”);

smp2.run();

*/

// Aşağıda birer thread nesnesi oluşturulmuştur.

// Java’da C# gibi delegate konusu da olmadığı için multithreading konusu basittir.

// senkronizasyon gibi detaylar farklı bir makalenin konusu olacak şekilde ileride ele alınacaktır.

Sample smp = new Sample (“aykut”);

Sample smp2 = new Sample (“taşdelen”);

Thread thr1 = new Thread(smp);

Thread thr2 = new Thread(smp2);

thr1.start();

thr2.start();

}