.NET
Gadgeteer ile Başlangıç
.NET Gadgeteer, zaten .NET Micro Framework ile
kolaylaştırılmış mikrodenetleyici programlamanın olabildiğince
basite indirgenmiş, görselleştirilmiş hali. Öyle ki, sıfır
elektronik bilgisi olan bir .NET programcısının hayalindeki
elektronik cihazı çok kısa bir sürede geliştirmesine olanak
sağlıyor.
Bir anakart (mikrodenetleyici modülü) ve isteğe bağlı buton,
sensör gibi cihazları -ters takılamayacak- hazır kablolarla
birbirine bağlayarak elektronik kitinizi dilediğiniz gibi
oluşturuyorsunuz. Daha sonra, Visual Studio üzerinden görsel
olarak neyi nereye bağladığınızı seçiyorsunuz. İşte bu kadar,
hazırsınız!
Öngereksinimler
.NET Gadgeteer sistemi, şu an için simulatör üzerinde
çalışmıyor. Uygulamanızı test etmek ve hayata geçirmek için
fiziksel bir geliştirme kiti satın almanız gerekli.
Yazılımsal olarak ise, Visual Studio 2010 (Express dahil),
.NET Micro Framework SDK'sı ve .NET Gadgeteer kitinizin SDK'sına
sahip olmanız gerekiyor.
Başlayalım!
Öngereksinimlerde her şey yolundaysa, Visual Studio'nuzu açıp
File > New Project ile yola koyulalım. .NET Gadgeteer'i
yükledikten sonra ilk kez Visual Studio'nuzu açıyorsanız,
Installed Templates bölümüne "Gadgeteer" kategorisinin
eklendiğini göreceksiniz.

Bize sunulan .NET Gadgeteer Application seçeneği ile
projemizi oluşturalım. Bu aşamadan sonra Visual Studio penceresi
aşağıdaki gibi bir şekil alacak.

Önceden Micro Framework ile çalıştıysanız gözünüze ilk
çarpacak olan şey, çok büyük olasılıkla görselliğin eklenmiş
olması olacak. Yani, sağ üstteki Toolbox'dan gerekli donanımsal
bileşenleri ortadaki Designer penceresine sürükleyerek projemize
eklemiş oluyoruz. Toolbox içerisinde buton, kamera, renkli
dokunmatik LCD ekran, ethernet bağlantısı, joystick, RGB LED,
potansiyometre, SD kart, USB host, USB device, USB seri port ve
WiFi modül bileşenleri bulunuyor. Bu parçalar üretici firmaya
göre listelenmiş. Örneğin, az önce saydıklarım GHI
Electronics'in Kasım 2011 itibariyle ürettiği kitler. Diğer
marka ve modeller de güncellemelerle bu listedeki yerini
alacaktır.
Ortadaki Designer penceresinde gördüğümüz, FEZ Spider anakart
modeli. Üzerindeki 1'den 14'e kadar numaralandırılmış soketler,
Toolbox'daki kitlerle bağlantı sağlamamız için yerleştirilmiş.
Mikrodenetleyicilerin yapısı gereği her bir soketin kendisine
has özelliği bulunuyor. Örneğin, potansiyometre modülünü
kullanabilmemiz için mikrodenetleyicinin analog giriş özelliği
bulunan pinleriyle bağlantı sağlamamız gerekir. Yani her
istediğimiz cihazı istediğimiz yuvaya bağlayamıyoruz. (Panik
yok, neyin nereye bağlanabileceğini de Gadgeteer bize
gösteriyor.)
Ekranın sol altındaki Gadgeteer Model Explorer araç kutusu,
cihazın üzerindeki soketleri ve bunlara eklenen bileşenlerin
listesini gösterecek. Designer penceresinden kod görünümüne
geçtiğimizde, modüllerin bağlantılarını görmemiz için düşünülmüş
bir yenilik...
Bu görünüm üzerinde yeteri kadar durduktan sonra, artık
bileşen eklemenin vaktidir. Elimizde 2 düğme (Button), 1 de RGB
LED (MulticolorLed) olduğunu varsayalım. Toolbox'dan bu
kontrolleri Designer penceresine sürükleyerek projemize
ekleyelim.

Bileşenleri Designer penceresine sürükledikçe, bunlara
otomatik isim verilecek. Bu isimler (button, button1 ve led)
aracılığıyla kod penceresinden direkt olarak cihazlara
ulaşabileceğiz.
Bir önceki aşamada sözünü ettiğim, cihazların her pine
bağlanamaması da bu aşamada çözülüyor. Ortadaki buton1
bileşeninin soketine tıkladığımızda imleç şekil değiştiriyor ve
anakart üzerinde bağlantı yapabileceğimiz soketler yeşil renk
alıyor. Bunlardan istediğimiz birine tıklayarak bağlantıyı
yapmış oluyoruz. Elimizdeki fiziksel cihaz üzerinde de aynı
bağlantıyı yapmamız gerekiyor.

Cihazları tek tek bağladığımızda, yukarıdaki gibi bir görüntü
elde edeceğiz. Bu aşamada tüm cihazlarımızı anakarta bağlamış
olduk. (Bunu da yapmaya üşenen arkadaşlar için, boş bir alana
sağ tık > Connect all modules seçeneği, tüm parçaları uygun
soketlere otomatik olarak bağlıyor.) Biz bağlama işlemini
yaparken, Visual Studio'da arka planda her bir modülü
yapılandırıyor ve "Program.generated.cs" dosyasına gerekli
kodları ekliyor. Şu ana kadar yaptığımız değişiklikleri yansıtan
yapılandırma kodu aşağıdaki gibi oluştu:
[C#] Program.generated.cs
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by the Gadgeteer Designer.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using Gadgeteer;
using GTM = Gadgeteer.Modules;
namespace GadgeteerApp1
{
public partial class Program : Gadgeteer.Program
{
// GTM.Module defintions
Gadgeteer.Modules.GHIElectronics.Button button;
Gadgeteer.Modules.GHIElectronics.Button button1;
Gadgeteer.Modules.GHIElectronics.MulticolorLed led;
public static void Main()
{
//Important to initialize the Mainboard first
Mainboard = new GHIElectronics.Gadgeteer.FEZSpider();
Program program = new Program();
program.InitializeModules();
program.ProgramStarted();
program.Run(); // Starts Dispatcher
}
private void InitializeModules()
{
// Initialize GTM.Modules and event handlers here.
button = new GTM.GHIElectronics.Button(5);
button1 = new GTM.GHIElectronics.Button(6);
led = new GTM.GHIElectronics.MulticolorLed(11);
}
}
}
Özetle; önce modüller oluşturuldu, sonrasında ise türlerine
göre birer instance'ları alınarak kullanıma hazır hale
getirildi.
Eklediğimiz bileşenlere erişmek için klasik .NET Micro
Framework uygulamalarında olduğu gibi Program.cs dosyasını
kullanacağız. Bu dosya, uygulamanın kullanıcı kodunun başladığı
yerdir. Program.cs dosyası ilk açıldığında aşağıdaki gibi bir
içerikle karşımıza çıkıyor:
[C#] Program.cs
using System;
using Microsoft.SPOT;
using Microsoft.SPOT.Presentation;
using Microsoft.SPOT.Presentation.Controls;
using Microsoft.SPOT.Presentation.Media;
using GT = Gadgeteer;
using GTM = Gadgeteer.Modules;
using Gadgeteer.Modules.GHIElectronics;
namespace GadgeteerApp1
{
public partial class Program
{
void ProgramStarted()
{
/******************************************************************************************
Access modules defined in the designer by typing their name:
e.g. button
camera1
Initialize event handlers here.
e.g. button.ButtonPressed += new GTM.MSR.Button.ButtonEventHandler(button_ButtonPressed);
***************************************************************************************** */
// Do one-time tasks here
Debug.Print("Program Started");
}
}
}
Debug.Print metodunun hemen altına uygulama kodlarımızı
yazabiliriz. Basit bir uygulama olarak, bir butona basınca LED'i
yakan, öbürüne basınca söndüren kod blokları aşağıdaki gibi
olacak:
[C#] Program.cs
using System;
using Microsoft.SPOT;
using Microsoft.SPOT.Presentation;
using Microsoft.SPOT.Presentation.Controls;
using Microsoft.SPOT.Presentation.Media;
using GT = Gadgeteer;
using GTM = Gadgeteer.Modules;
using Gadgeteer.Modules.GHIElectronics;
namespace GadgeteerApp1
{
public partial class Program
{
void ProgramStarted()
{
// Do one-time tasks here
Debug.Print("Program Started");
button.ButtonPressed += new Button.ButtonEventHandler(button_ButtonPressed);
button1.ButtonPressed += new Button.ButtonEventHandler(button1_ButtonPressed);
}
void button_ButtonPressed(Button sender, Button.ButtonState state)
{
led.TurnWhite(); // LED'i beyaz renkte yakar.
}
void button1_ButtonPressed(Button sender, Button.ButtonState state)
{
led.TurnOff(); // LED'i kapatır.
}
}
}
Önce butonların ButtonPressed eventlerini oluşturduk.
Fiziksel olarak butonlara basıldığında belirlediğimiz eventler
tetiklenecek. (Masaüstü uygulamalarında olduğu gibi.)
led.TurnWhite metodu ile bağladığımız RGB LED'i beyaz renkte
yakmış olacağız. led.TurnOff metodu ile de söndürmüş olacağız.
Eğer elinizde FEZ Spider kiti bulunuyorsa, USB portundan
bilgisayarınıza bağlayarak ve F5 tuşuna basarak fiziksel cihaz
üzerinde deneme yapabilirsiniz.
Umut Erkal
www.uerkal.com
|
@uerkal