Facebook RSS Feed
 

.NET Micro Framework’de InterruptPort ile Buton Kullanımı

Button IconKontrol paneli tarzı tasarımlarda sıklıkla kullanacağımız butonlar, Windows uygulamalarında kullandığımız button nesnesinin elle tutulur halidir. Nasıl bir Windows uygulamasında button nesnesine tıkladığımız anda “Click” eventi fırlıyorsa, MicroFramework uygulamalarında da gerçek bir butona bastığımızda “OnInterrupt” eventi fırlayacaktır. Bu şekilde, sisteminize buton ve çeşitli sensörleri bağlayıp basit robot uygulamaları yapmanız mümkün olur.

Interrupt Nedir?

Türkçe karşılığı “kesme” olan Interrupt, oluştuğu anda uygulama akışını keser, kendi işlemini gerçekleştirir ve bitiminde uygulama kaldığı yerden devam eder. Mikrodenetleyicilerde kullanılan bir çok Interrupt vardır. Seri porta veri ulaştığında oluşan Interrupt, Timer tick’inde oluşan Interrupt yada Port Değişikliğinde oluşan InterruptPort gibi.

InterruptPort

Mikrodenetleyicinin pinlerine uygulanan akımda değişiklik olduğu zaman oluşan eventtir. Nasıl Windows uygulamalarındaki button nesnesinde “KeyUp”, “KeyDown”, “Click” gibi eventler varsa, gerçek butonlarda da eşdeğer eventleri bulmamız mümkündür. Aşağıdaki grafik, mikrodenetleyicinin pinine uyguladığımız elektriği ve bunun sonucunda oluşan Interrupt tipini göstermektedir.

Interrupt Types

InterruptPort’un işleyişini örnek bir uygulama yaparak görebiliriz. Port girişlerini kullanabilmemiz için öncelikle proje referanslarına “Microsoft.SPOT.Hardware.dll” dosyasını eklememiz gerekir. (Solution Explorer > References’a sağ tık, Add Reference > .NET Sekmesi, “Microsoft.SPOT.Hardware.dll”)

using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
 
namespace ButonEventi
{
    public class Program
    {
        public static void Main()
        {
            InterruptPort buton1 =
                new InterruptPort(Cpu.Pin.GPIO_Pin0,
                    false,
                    Port.ResistorMode.PullDown,
                    Port.InterruptMode.InterruptEdgeBoth);
            buton1.OnInterrupt += new NativeEventHandler(buton1_OnInterrupt);
            Thread.Sleep(Timeout.Infinite);
        }
 
        private static void buton1_OnInterrupt(uint port, uint state, TimeSpan time)
        {
            Debug.Print(time.ToString() + ": " + port + " pininin durumu: " + state);
        }
    }
}

F5 ile uygulamamızı çalıştırıp emulatör butonlarından 0 butonuna (Embedded Master modülünde “Down”) bastığımızda ve elimizi kaldırdığımızda VisualStudio Immediate Window’da aşağıdaki yazılar çıkacaktır:

20:52:55.1160319: 0 pininin durumu: 0
20:52:55.2623327: 0 pininin durumu: 1
20:52:55.3672146: 0 pininin durumu: 0
20:52:55.4803180: 0 pininin durumu: 1
20:52:55.5938500: 0 pininin durumu: 0

Interrupt Modları

Uygulamada gördüğümüz gibi, butona bastığımız ve elimizi çektiğimiz anda Interruptlar oluşuyor. InterruptMode’da kullanabileceğimiz 6 çeşit Interrupt modu bulunur:

public enum InterruptMode
{
    InterruptNone,           // Interrupt devre dışı
    InterruptEdgeLow,        // Düşüş anında Interrupt
    InterruptEdgeHigh,       // Yükselme anında Interrupt
    InterruptEdgeBoth,       // Durum değişikliğinde Interrupt
    InterruptEdgeLevelHigh,  // Yüksek seviyedeyken Interrupt
    InterruptEdgeLevelLow    // Düşük seviyedeyken Interrupt
}

InterruptEdgeLevelHigh ve Low kesmelerinde bir kez event fırlar ve birdaha fırlamaz. Bu nedenle, uygulamanızın tekrar Interrupt’a girmesini istediğimizde “buton1_OnInterrupt” metodunun sonuna “buton1.ClearInterrupt();” satırını ekleyebilirsiniz.




 
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