Mert Sarac

Developer, Entrepreneur, Geek

Arduino ile C Sharp Haberleşmesi

Merhaba,

Yapacağımız bazı Arduino uygulamalarını bilgisayarımızla haberleştirmemiz gerekebiliyor. Bir WinForm uygulaması ile bunun nasıl yapılacağını anlatmak istedim.

Bunun için basit bir Arduino projesi oluşturup 12 ve 13.pinleri Output olarak belirledim ve seri portu dinlemeye başladım.

void setup() {
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  
  Serial.begin(9600);
}

Yaptığım projede Arduino üzerinde 13.pine yeşil, 12.pine kırmızı LED bağladım. Amacımsa seri porttaki değişiklikleri dinleyerek bunu yakıp söndürerek basit bir blink uygulaması oluşturmak. Bunun için seri portu dinleyerek bir dizi basit koşul oluşturdum.

void loop() {
  
  if(Serial.available())
  {
      int a = Serial.read();
    
      switch(a){
         case '0':
           digitalWrite(13, HIGH);
           digitalWrite(12, LOW);
           break;
         case '1':
           digitalWrite(13, LOW);
           digitalWrite(12, HIGH);
           break;
         default:
           digitalWrite(12, LOW);
           digitalWrite(13, LOW);
           break;
      }
  }
}

Uygulamanın C# tarafına gelecek olursak Visual Studio’da oluşturduğum WinForm projesine 1 Label, 2 Button, 1 ComboBox ve 1 SerialPort (System.IO.Ports.SerialPort) kontrolü ekliyorum. Ardından aşağıdaki metodu çağırarak oluşturduğum ComboBox’a aktif seri portları tanımlıyorum.

private void GetPortNames()
        {
            string[] ports = SerialPort.GetPortNames();

            foreach (string port in ports)
            {
                PortList.Items.Add(port);
            }
        }

Uygulama kapanırken seri portun açık kalmaması için formun FormClosing eventine aşağıdaki tanımlamayı yapıyorum.

if (serialPort.IsOpen)
            {
                serialPort.Write("2");
                serialPort.Close();
            }

Oluşturduğum ilk buton ComboBox’ta seçilen değere göre seri port bağlantısını açıyor. Bunun için aşağıdaki kodu kullanıyorum.

try
            {
                serialPort.PortName = PortList.SelectedItem.ToString();
                serialPort.BaudRate = 9600;
                serialPort.Open();
                LedStateText.Text = "Yanmıyor";
                ConnectButton.Enabled = false;
                ChangeButton.Enabled = true;
            }
            catch
            {
                LedStateText.Text = "Bağlantı hatası!";
            }

Uygulamada LEDState adında integer cinsi bir değişken oluşturuyorum ve buton kontrolümün Click eventinde aşağıdaki kodu kullanarak yanan LED’in değişmesini sağlıyorum.

if (!LEDState)
            {
                serialPort.Write("1");
                LedStateText.Text = "Meşgul";
                LEDState = true;
            }
            else
            {
                serialPort.Write("0");
                LedStateText.Text = "Müsait";
                LEDState = false;
            }

Bunun ardından uygulamamızı çalıştırabiliriz.

Uygulamanın örnek WinForm projesini buradan indirebilirsiniz.
Uygulamanın örnek Arduino kodlarını buradan indirebilirsiniz.



Mert Sarac

Mert Sarac

2015 başından beri Neurolize'da Yazılım Geliştirme Uzmanı görevini yürütüyor, Cloud Processing, BCI, Big Data Analysis ve Nöropazarlama teknolojileri üzerine çalışıyorum. 2013 - 2015 yılları arasında Rhino Runner Dijital Medya Ajansı'nda Kıdemli Yazılım Geliştirme Uzmanı görevinde sosyal medya uygulamaları, web siteleri, outdoor projeler, SharePoint İş Uygulamaları ve Windows Phone uygulamaları geliştirdim. 2009 - 2013 yılları arasında da Yemeksepeti'nde Yazılım Geliştirici ve Yazılım Test Uzmanı görevlerinde çalıştım. Eğitimim Kadir Has Üniversitesi ve Anadolu Üniversitesi'nde devam etmekte. .NET Framework, Mobil Uygulamalar, Silverlight, Office 365, ASP.NET, SharePoint ve Windows Azure ile yakından ilgileniyor olsam da elektroniğe, karikatürlere, bilim belgesellerine ve Rusça öğrenmeye özel bir ilgim var. Boş kaldıkça Rusça öğrenmeye çalışıyor, Intel Galileo ve Arduino ile IoT projeleri geliştirmeye çalışıyorum.

Yorum