Facebook RSS Feed
 

.NET Micro Framework: USB Fare Kullanımı

-Gömülü bir sistemin kullanıcı deneyimini zenginleştirmek için sisteme fare entegre ederek masaüstü bilgisayarlarının kullanım kolaylığını yakalayabiliriz. .NET Micro Framework ile USB fare entegrasyonu yapmamız son derece kolay olacaktır. Örneğimizde mikrodenetleyiciye bağladığımız USB farenin hareket, buton ve tekerlek değerlerini sorgulayıp debug mesajı olarak yazdırmayı göreceğiz.

Öngereksinimler

Uygulamayı çalıştıracağınız mikrodenetleyicinin .NET Micro Framework 4.0 yada 4.1 desteklemesi ve USB Host özelliğinin bulunması gerekiyor. Örnek kodları GHI Electronics'in USB Host destekleyen cihazlarında çalıştırabilirsiniz. (USBizi 144, EMX, Embedded Master ve FEZ).

Uygulama Kodları

Visual Studio 2010 ile yeni bir .NET Micro Framework 4.0 Console Application oluşturduktan sonra, proje referanslarına GHIElectronics.NETMF.USBHost.dll, GHIElectronics.NETMF.System.dll ve GHIElectronics.NETMF.Hardware.USBizi.dll kütüpanelerini ekleyelim. (Mikrodenetleyiciniz .NET MF 4.0 ile çalışıyorsa, proje özelliklerinden Target Framework ayarını 4.0 olarak değiştirin). Sonrasında Program.cs dosyasına aşağıda açıkladığım kodları yazalım.

using System;
using System.Threading;
using Microsoft.SPOT;
using GHIElectronics.NETMF.USBHost;
 
namespace MFUSBMouse
{
    public class Program
    {
        static USBH_Mouse mouse;
 
        public static void Main()
        {
            //USB Cihazı bağlandığında fırlayacak eventi belirleyelim:
            USBHostController.DeviceConnectedEvent 
                += new USBH_DeviceConnectionEventHandler(USBHostController_DeviceConnectedEvent);
 
            //Main Thread'i uyutalım:
            Thread.Sleep(Timeout.Infinite);
        }
 
        //USB Cihaz bağlandığında fırlayacak event:
        static void USBHostController_DeviceConnectedEvent(USBH_Device device)
        {
            if (device.TYPE == USBH_DeviceType.Mouse)
            {
                //Bağlanan cihaz fareyse Immediate Window'da gösterelim:
                Debug.Print("Fare algılandı.");
 
                //Fare cihazını oluşturalım:
                mouse = new USBH_Mouse(device);
 
                //Fare durumunun taranacağı thread'in önceliğini ayarlayalım:
                mouse.InternalThreadPriority = ThreadPriority.Normal;
                //Highest değeri daha sık tarama yapacaktır, fakat diğer thread'lere düşen işlemci
                //zamanını düşürecektir.
 
                //Farenin hareket edeceği alanın sınırlarını belirleyelim:
                mouse.SetCursorBounds(0, 319, 0, 239);
                //İmleç sınırlarını kullanacağınız ekranın çözünürlüğüne göre ayarlayabilirsiniz.
                //Varsayılan değerler 0 ile 512 arasındadır.
 
                //İmlecin hızını ayarlayalım:
                mouse.Scale(1);
 
                //Fare hareketinde fırlayacak event:
                mouse.MouseMove += new USBH_MouseEventHandler(mouse_MouseMove);
 
                //Herhangi bir butona tıklandığında fırlayacak event:
                mouse.MouseDown += new USBH_MouseEventHandler(mouse_MouseDown);
 
                //Basılı buton serbest bırakıldığında fırlayacak event:
                mouse.MouseUp += new USBH_MouseEventHandler(mouse_MouseUp);
 
                //Fare tekerleri hareket ettiğinde fırlayacak event:
                mouse.MouseWheel += new USBH_MouseEventHandler(mouse_MouseWheel);
 
                //Fare bağlantısı kesildiğinde fırlayacak event:
                mouse.Disconnected += new USBH_MouseEventHandler(mouse_Disconnected);
            }
        }
 
        //Fare hareketinde fırlayacak event:
        static void mouse_MouseMove(USBH_Mouse sender, USBH_MouseEventArgs args)
        {
            Debug.Print("Pozisyon: " + sender.Cursor.X + ", " + sender.Cursor.Y + ", " +
            "Delta: " + args.DeltaPosition.X.ToString() + ", " + args.DeltaPosition.Y.ToString());
            //Cursor X be Y değerleri, farenin yukarıda sınırlarını belirlediğimiz alan üzerindeki
            //pozisyon değerlerini döndürür.
            //Delta değeri ise, sınırlara bağlı kalmaksızın farenin bir önceki taramadan sonra
            //ne kadar hareket ettiğini gösterir.
        }
 
        //Herhangi bir butona tıklandığında fırlayacak event:
        static void mouse_MouseDown(USBH_Mouse sender, USBH_MouseEventArgs args)
        {
            Debug.Print("Buton Tıklandı: " + args.ChangedButton);
        }
 
        //Basılı buton serbest bırakıldığında fırlayacak event:
        static void mouse_MouseUp(USBH_Mouse sender, USBH_MouseEventArgs args)
        {
            Debug.Print("Buton Serbest: " + args.ChangedButton);
        }
 
        //Fare tekerleri hareket ettiğinde fırlayacak event:
        static void mouse_MouseWheel(USBH_Mouse sender, USBH_MouseEventArgs args)
        {
            Debug.Print("Tekerlek: " + args.DeltaPosition.ScrollWheelValue.ToString());
        }

        //Fare bağlantısı kesildiğinde fırlayacak event:
        static void mouse_Disconnected(USBH_Mouse sender, USBH_MouseEventArgs args)
        {
            Debug.Print("Fare söküldü.");
        }
    }
}

Debug Zamanı

Uygulamayı çalıştırıp mikrodenetleyicinizin USB portuna fare bağladığınızda, Visual Studio Immediate Window'da aşağıdaki gibi değerler görünecektir.

Fare algılandı.
Buton Tıklandı: 0
Buton Serbest: 0
Buton Tıklandı: 1
Buton Serbest: 1
Buton Tıklandı: 2
Buton Serbest: 2
Buton Tıklandı: 3
Buton Serbest: 3
Buton Tıklandı: 4
Buton Serbest: 4
Tekerlek: -5
Tekerlek: 4
Pozisyon: 0, 0, Delta: 0, 0
Pozisyon: 3, 0, Delta: 0, -1
Pozisyon: 10, 1, Delta: 1, 0
Pozisyon: 16, 2, Delta: 6, 1
Pozisyon: 25, 3, Delta: 9, 1
Pozisyon: 27, 3, Delta: 2, 0
Pozisyon: 29, 3, Delta: 2, 0
Pozisyon: 168, 0, Delta: -2, -8
Pozisyon: 167, 0, Delta: -1, -3
Pozisyon: 149, 0, Delta: -2, -5
Pozisyon: 268, 188, Delta: 0, 4
Pozisyon: 269, 193, Delta: 1, 5
Pozisyon: 270, 210, Delta: 0, 3
Pozisyon: 270, 213, Delta: 0, 3
Pozisyon: 270, 217, Delta: 0, 4
Fare söküldü.




 
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