Facebook RSS Feed
 
.NET Micro Framework: .NET Gadgeteer ile Joystick Kullanımı
Tarih: 17.01.2013, Platform: .NET Gadgeteer 4.2, IDE: Visual Studio 2010, Level: 200

.NET Gadgeteer, bir çok donanımsal bileşeni nesne mantığıyla projelerimizde kullanmamıza olanak sağlıyor. Modül olarak adlandırılan bu bileşenlerden joysticki yazımıza konu edeceğiz. Gamepadlerin analog stickleri yapısındaki joystickler, x ve y eksenlerine bağlı birer potansiyometre ve dikey basımı algılayan bir butondan oluşuyor. Yazımızda  joystickin kullanımı üzerinde duracağız...

Gerekli Modüller

Sistemi kurmak için GHI Electronics'in geliştirdiği "Joystick" ve "USB Client SP" modüllerine ihtiyacımız olacak. Projemizde "FEZ Cerberus" anakartını kullanacağız. A soketine sahip başka bir anakart ile de uygulamayı geliştirebilirsiniz.

Joystick Modülü

-

Başlangıçta da belirttiğim gibi, joystick modülü, x ve y eksenlerine bağlı 2 adet 10K potansiyometreye sahip. Joystick hareketinde potansiyometrelerin çıkış değerleri, mikrodenetleyicinin analog girişleri aracılığıyla okunur ve double türünden değer döndürür. X ekseni için orta nokta 0.5, yukarı yönü 1, aşağı yönü ise 0 değerini alır. Y ekseni ise solda 0, ortada 0.5, sağda ise 1 değerini alır. Ayrıca, gamepadlerde olduğu gibi joystiğin tepesine basıldığında ve serbest bırakıldığında birer event tetiklenebilir.

Analog girişlerin okunması, double'a çevrilmesi ve buton yapılandırması .NET Gadgeteer tarafından otomatik olarak yapılır. Bize düşen yalnızca belli aralıklarla x ve y pozisyonlarının değerlerini okumak olacaktır.

Uygulama Tasarımı

Visual Studio ile "GG_Joystick" adında bir proje oluşturalım. Kırmızı USB Client ve joystick modülünü anakarta uyumlu soketlere bağlayalım. (FEZ Cerberus için USB Client 8'e, Joystick ise 2, 3 yada 4'e bağlanabiliyor.)

-

.NET Gadgeteer projelerinde kullanacağımız modüllere ait referanslar Visual Studio tarafından otomatik olarak yönetilir. Bu yüzden .NET Micro Framework projelerinde olduğu gibi referanslara müdahale etmemiz gerekmez.

Uygulama Kodları

Az önce oluşturduğumuz sistem tasarımında, hangi porta bağladığımızdan bağımsız olarak Josytick'e "joystick" adıyla ulaşabiliyoruz. "GetJoystickPosition" metodu, bize x ve y pozisyonlarının değerlerini döndürüyor. Bu değerleri, saniyede 4 defa tick'leyecek bir timer ile sorgulayıp "Debug.Print" metodu ile Visual Studio Immediate Window'a debug mesajı olarak göndereceğiz.

Joystick'e bastığımızda ve serbest bıraktığımızda tetiklenecek eventler ile de buton durumundan haberdar olacağız.

 [C#] Program.cs

using System;
using System.Collections;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Presentation;
using Microsoft.SPOT.Presentation.Controls;
using Microsoft.SPOT.Presentation.Media;
using Microsoft.SPOT.Touch;
 
using Gadgeteer.Networking;
using GT = Gadgeteer;
using GTM = Gadgeteer.Modules;
using Gadgeteer.Modules.GHIElectronics;
 
namespace GG_Joystick
{
    public partial class Program
    {
        void ProgramStarted()
        {
            Debug.Print("Uygulama basladi.");
 
            // Joystick butonuna basıldığında tetiklenecek event:
            joystick.JoystickPressed +=
                new Joystick.JoystickEventHandler(joystick_JoystickPressed);
 
            // Joystick butonu serbest bırakıldığında tetiklenecek event:
            joystick.JoystickReleased +=
                new Joystick.JoystickEventHandler(joystick_JoystickReleased);
 
            // Saniyede 4 kez tetiklenecek timer:
            GT.Timer timer = new GT.Timer(250);
            timer.Tick += new GT.Timer.TickEventHandler(timer_Tick);
            timer.Start();
        }
 
        void timer_Tick(GT.Timer timer)
        {
            // Joystick'in x ve y koordinatlarını yazdır:
            Debug.Print(
                joystick.GetJoystickPosition().X.ToString() + "," +
                joystick.GetJoystickPosition().Y.ToString());
        }
 
        void joystick_JoystickPressed(Joystick sender, Joystick.JoystickState state)
        {
            // Butona tıklandığında yazdır:
            Debug.Print("Butona basildi.");
        }
 
        void joystick_JoystickReleased(Joystick sender, Joystick.JoystickState state)
        {
            // Buton serbest bırakıldığında yazdır:
            Debug.Print("Buton serbest.");
        }
    }
}

F5 ile uygulamayı çalıştırdığınızda, yaklaşık 30 saniye içerisinde mikrodenetleyici programlaması tamamlanacak ve Visual Studio Immediate Window'da (yada Output Window) aşağıdaki gibi pozisyon ve buton bilgisi raporlanacak.

Immediate Window

Using mainboard GHI Electronics FEZCerberus version 1.1
Uygulama basladi.
0.48498168498168498,0.51379731379731375
0.48522588522588528,0.51379731379731375
0.48522588522588528,0.51428571428571423
0.48522588522588528,0.51404151404151399
0.48498168498168498,0.51428571428571423
0.48498168498168498,0.51379731379731375
Butona basildi.
0.48522588522588528,0.51428571428571423
0.48547008547008547,0.51404151404151399
0.48522588522588528,0.51452991452991448
0.48498168498168498,0.51428571428571423
Buton serbest.
0.48522588522588528,0.51428571428571423
0.48522588522588528,0.51379731379731375
0.48571428571428571,0.51404151404151399

Joystick modülünü diğer modüllerle birlikte kullanarak yılan gibi basit oyunlar gerçekleştirebilirsiniz yada robotik sistemleri kontrol edebilirsiniz. İlerleyen yazılarımızda seri port kullanımını gördükten sonra, joystick ile PC üzerinde imleç kontrolü uygulaması geliştireceğiz.


Ek Dosya: Uygulama Kodları
Okunma Sayısı: 5019

comments powered by Disqus
 
Hoşgeldiniz!
Son güncelleme: 25.12.2016
-
Yeni Teknik Yazılar
Latte Panda İncelemesi
Turta IoT HAT İncelemesi
USB Gamepad Kullanımı
GPIO Kullanımı
VEML6075 UV Sensör Kullan...
-
İlgili Gruplar
.NET MF ve Gadgeteer FB Grubu
İst. IoT & Wearables Meet-up
-
 

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.Copyright © 1999 - 2017, Umut Erkal. Bu materyal, "Creative Commons Public Licence" ile sunulmuştur.
Kaynak göstererek ve ücretsiz olarak, aynı şartlar altında paylaşabilir ve kullanabilirsiniz. | Kullanım Sözleşmesi