Merhaba arkadaşlar. Bu dersimizde ilk projemiz olacak olan Windows 10 Iot Core kullanarak led yakmayı yani gpio kontrolünü öğreneceğiz. Bir önceki dersimizde gerekli kurulumları ve cihazımızın içine nasıl kod yüklendiğini görmüştük. Bu dersimizde de ilk derste yüklediğimiz boş kod yerine led yakma kodu atıp cihaza bağladığımız ledi yakıp söndüreceğiz.
Gerekenler:
- Raspberry pi seti
- Ethernet kablosu
- Led
- Direnç (220 Ω kırmızı-kırmızı-kahverengi)
- Breadboard
- 2 tane dişi-erkek jumper
Bağlantı:
Bağlantıyı üstteki resimlere bakarak yaptıysanız bir sonraki adım Raspberry’nizin içine kod yüklemektir. Bir önceki yazıda yaptığımız gibi Visual Studio’yu açınız. Yeni projeye tıklayıp “Background Application(IoT)”i seçiniz. Üstteki “Device” imlecinin yanına tıklayıp “Remote Machine”i seçiniz. Auto detected sekmesinde cihazınızın resimdeki gibi gözükmesi lazım. Buna çift tıkladığınızda artık Visual Studio’nuz Raspberry’e bağlanmıştır. Device imlecinin adı artık Remote Machine olmuş olmalı. Proje dosyasını yüklemek için bu imlece tıklamanız yeterli.
Kod:
İnternette verilen led yakmayı bana göre yeni başlayan biri için karışık bir kod yazarak anlatmışlar. Bu ilk örnek için kafa karıştıracağından en basit led yakma örneğini size göstermeye çalıştım. Verdiğim örnek genel olarak çıkış tanımlayıp, ledi bir saniye yak bir saniye söndürden ibarettir.
using System; using Windows.Devices.Gpio; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using System.Threading.Tasks; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Media; namespace Blinky { public sealed partial class MainPage : Page { private const int LED_PIN = 5; //led pinini 5 olarak ayarla private GpioPin pin; private GpioPinValue pinValue; public MainPage() { var gpio = GpioController.GetDefault(); pin = gpio.OpenPin(LED_PIN); pinValue = GpioPinValue.High; pin.Write(pinValue); pin.SetDriveMode(GpioPinDriveMode.Output); //cikis olarak tanimla while (true) { pinValue = GpioPinValue.Low; pin.Write(pinValue); //yak Task.Delay(1000).Wait(); // 1 sn bekle pinValue = GpioPinValue.High; pin.Write(pinValue); // sondur Task.Delay(1000).Wait(); // 1 sn bekle } } } }
İnternetteki Kod:
Burada üstteki örnek gibi bir saniye beklemek yerine 500 ms sayaç yaratıp sayaç 500 ms saydığında led yanıyorsa söndür, sönükse yak diyerek, led 500 ms’de bir yakıp söndürülmüş.
// Copyright (c) Microsoft. All rights reserved. using System; using Windows.Devices.Gpio; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Media; namespace Blinky { public sealed partial class MainPage : Page { private const int LED_PIN = 5; private GpioPin pin; private GpioPinValue pinValue; private DispatcherTimer timer; private SolidColorBrush redBrush = new SolidColorBrush(Windows.UI.Colors.Red); private SolidColorBrush grayBrush = new SolidColorBrush(Windows.UI.Colors.LightGray); public MainPage() { InitializeComponent(); timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromMilliseconds(500); timer.Tick += Timer_Tick; InitGPIO(); if (pin != null) { timer.Start(); } } private void InitGPIO() { var gpio = GpioController.GetDefault(); // Show an error if there is no GPIO controller if (gpio == null) { pin = null; GpioStatus.Text = "There is no GPIO controller on this device."; return; } pin = gpio.OpenPin(LED_PIN); pinValue = GpioPinValue.High; pin.Write(pinValue); pin.SetDriveMode(GpioPinDriveMode.Output); GpioStatus.Text = "GPIO pin initialized correctly."; } private void Timer_Tick(object sender, object e) { if (pinValue == GpioPinValue.High) { pinValue = GpioPinValue.Low; pin.Write(pinValue); LED.Fill = redBrush; } else { pinValue = GpioPinValue.High; pin.Write(pinValue); LED.Fill = grayBrush; } } } }