Bu içerikte sizlerle, C# ile Arduino kontrolü gerçekleştiriyoruz. Seri haberleşme yardımıyla ve C# kullanarak oluşturduğumuz arayüzlerle projelerimizi kontrol etmeyi ve veri okumayı öğreneceğiz, bunun yanında C# ile form oluşturarak, daha kullanışı ve kullanıcı dostu olabilirsiniz.
Öncelikle, bilgisayarımıza Microsoft Visual Studio’yu kurmamız gerekiyor, sonrasında bağlantıları gerçekleştirip, kodlarımızı deneyeceğiz. Bütün adımlara aşağıdan ulaşabilirsiniz. Projenizi bilgisayar üzerinden kontrol etmek, arayüz tasarımınız ile kullanıcı dostu olmak ister misiniz?
Seri İletişim Nedir?
Seri iletişim dijital bilginin tek bir hat üzerinden ard arda taşınmasıdır, yani seri iletişimde bir kerede sadece bir bit iletilir. Paralel iletişimde ise tüm bitler aynı anda transfer edilir. Bu yüzden seri iletişimi tek bir bağlantı sağlayabilirken paralel iletişimde her bit için ayrı bir bağlantı gerekir. Bunun sonucu olarak da seri iletişim, maliyeti bakımından daha avantajlıdır.

Seri iletişimde veriler, genellikle belirli bir hız (baud rate) ile bir verici cihazdan (örneğin bir Arduino) bir alıcı cihaza (örneğin bir bilgisayar) gönderilir. Verici ve alıcı, veri alışverişi için belirli bir protokolü paylaşır.
Baud Rate: Bir saniyede iletilen sembol (bit) sayısını ifade eder. Örneğin, 9600 baud hızında bir iletişimde saniyede 9600 bit veri aktarılır.
Microsoft Visual Studio Kurulumu
C# ile form oluşturmak için Visual Studio’yu kullanacağız. Buradan, Visual Studio, Community 2019’u indirelim, çok kolay ilerlemeler ile kurulumu tamamlayalım.

Bilgisayarınıza inen Visual Studio kurucusuna çift tıklayarak yükleme işlemini başlatın. Kurulum işleminin başında “İş Yükleri” sekmesinde dil paketleri ve platformlardan seçim yapmanız istenecektir. Buradan “Evrensel Windows Platformu Geliştirme” ve “.NET masaüstü geliştirme” seçeneklerini seçiyoruz. Bunun haricinde kullanacağınız veya alternatif farklı platformları da seçebilirsiniz. Sağ alttan yükleme boyutunu görebilirsiniz. Platformları seçtikten sonra yükleme işlemine başlıyoruz.
C# ile Form Uygulamasını Oluşturmak
Kurulum tamamlandıktan sonra bu adımlar ile bir C# formu oluşturalım. Programı ilk açtığımızda bizi böyle bir Başlangıç Sayfası karşılar. Dosya bölümüne basarak, alttaki menüler açılır.

Bu menüden, Dosya>Yeni>Proje sekmesi ile devam edilir.

Devamında açılan pencere ile sol taraftaki diyagramlardan “Visual C#” kısmını seçiyoruz. Ortada açılan bölüm ile “Windows Form Uygulaması” seçeneğini seçiyoruz. Ad, Konum, Çözüm Adı gibi bölümlerini keyfinize göre değiştirebilirsiniz, fakat Çerçeve yani .NET Framework kısmına dokunmanıza pek gerek yok, bu seçeneği en güncel seçmekte fayda var, ayrıca bilgisayarınız .NET Framework yüklü değilse, program yüklenirken otomatik yüklenmiş olunacak.

Bütün adımları doğru yaparak geldiğimizde, bizi boş bir form karşılamış olucak. Bunun devamında formu doldurup kodumuzu yazmamız gerekicek. Bu kısımlarda sadece bilgisayar üzerinden kontrol etmek için. Farkındaysanız hala Arduino kısmına geçmedik.

Arayüz Tasarımı ve C# Kodu
Arayüzün nasıl ve ne şekilde olacağı tamamen size kalmış durumda, seri port bağlantısını göstermek için arayüze ekleyeceğiz. Fakat bunun kodun arkasında yani kullanıcıya göstermeden de yapılabildiğini bilelim.
Araç Kutusu sekmesi ile, form arayüzünde kullanacağımız bileşenlere ulaşabilirsiniz.

Bu projede kullanacağımız bileşenleri doğrudan tutup formun üstüne bırakabilirsiniz.
Kullanılacak Bileşenler;
- Buton
- Label
- ComboBox
- SerialPort
Neden bu nesneleri kullandığımızı açıklamak gerekirse: ComboBox’ı Arduino’nun bağlı olduğu portu seçerken kullanacağız. Bunu kodla da tanımlayabilirdik ancak port değişikliği durumundan etkilenmemek adına bu şekilde yapıyoruz. Label’ı led durumunu görmek, 2 butonu da ledi açıp kapatmak için kullanacağız. SerialPort, form üzerinde görünen bir araç değildir, seri iletişimi sağlamak için onu da projemize dahil ediyoruz.

Araçları eklediğimiz zaman, form arayüzüne bu şekilde gelmiş olucak. SerialPort gibi bileşenleri eklediğimiz zaman form arayüzüne değil, pencerenin en altına inmiş oluyor. Doğrudan üstlerine kod yazmak için her hangi bileşene çift tıklamak yeterli oluyor, ayrıca form load yani form’un ilk açılışında çalışmasını istediğini bir kod varsa, boş bir yere çift tıklamanız gerekiyor.

Arayüz tasarımını bu şekilde yapıyoruz.

Şimdi sırada adım adım kodlarımızı yazmak.
C# Kodu
Formun her hangi bir yerine çift tıklayarak kod bölümüne geçiyoruz.

İlk olarak, kod kısmının en üst kısmına “using System.IO.Ports;” Kütüphanesini eklememiz gerekiyor. Bu sayede form uygulamamız, Input/Output işlemlerini tanıyabilecek. Ayrıca form1_Load olayına bu kodu yazarak, form ilk açıldığında bağlı olan seri portlar ComboBox1‘e eklenmiş olucak. Kısacası Form1_Load alanına seri portları string tipinde bir diziye tanımlayan, ardından da bu portları comboBox1 nesneme ekleyen bir kod yazdık. Bu sayede form yüklendiğinde seri portlar comboBox1 içinde seçilebilir hale gelmiş olacak.

Paylaşılan kodları kendi projenize göre tekrar adlandırmayı unutmayın.
Form1_Load Kısmı
Burada button2 ve button3 butonlarının, comboBox1 kutusunun görevlerini yazdık. Ayrıca comboBox1 bölümünde, değişim zamanında gerekli porta bağlanmasını ayarladık.

Şimdi formu yani uygulamayı kapattığımızda, seri bağlantının kapanması için bir kod yazacağız.

Olaylar kısmına girip gerekli kodu ekliyoruz.

Bu sayede program kapansa bile açık kalan port bağlantısını, program kapanırken, port bağlantısını kapatmış oluyoruz.

C# kısmımız bitti. Bağlamadan denemek için Başlat butonuna yada F5 tuşuna basabilirsiniz. Bütün kodu paylaşıyoruz fakat kullanırken dikkatli olmakta fayda var, çünkü sizin bileşenleriniz ile farklılık gösterecektir, buton isimlerine dikkat edin.

C# ile Arduino Kontrolü için Gereken Tüm Kod
C# ile Arduino Kontrolü için Gereken Arduino Kodu
Burada Serial.read komutu ile, seri porttan gelen 1 yada 0 değeri ile LEDimizi yakıyoruz.
C# ile Arduino Kontrolü için Bağlantı Şeması

Bütün bağlantılarımız ve hazırlığımız tamamlandı ise; Form uygulamamız ile test edebiliriz.
BONUS: Microsoft Visual Studio’yu Arduino IDE Olarak Kullanmak
Neredeyse bütün yazılım dillerine entegre olabilen Microsoft Visual Studio’yu, aynı zamanda Visual Micro ile, Arduino’ya uyumlu hale getirebiliriz. Buradan indireceğiniz eklenti ile, gerekli bileşenleri kurmuş olacaksınız. C# ile Arduino Kontrolü için gereken tüm işlemleri burada da yapabilirsiniz, Gerekli sürümü indirdikten sonra sizi şöyle bir pencere karşılayacak. Burada Microsoft Visual Studio Version Selector ile devam ediyoruz.

Buradan klasör, versiyon ve hariç kartlar yani ATtiny85 gibi kartların kurulumu için verilen bağlantıları yazabilirsiniz.

Devamında, Arduino versiyonu, kart bilgileri, port bağlantısı gibi seçenekleri, seçerek kullanmaya başlayabilirsiniz.

Sonuç
C# ile arduino kontrolü sayesinde kullanıcı dostu arayüzler oluşturmanıza ve donanım projelerinizi daha işlevsel hale getirmenize olanak tanır. Bu temel projeyi geliştirerek sensör verilerinin işlenmesi, IoT entegrasyonu veya çok daha karmaşık sistemler geliştirebilirsiniz.
SerialPort Kullanımında Sık Yapılan Hatalar ve Çözümleri
C# formlarıyla Arduino haberleşmesi geliştirirken en sık karşılaşılan sorun, çapraz iş parçacığı (cross-thread) istisnasıdır. SerialPort.DataReceived olayı, ana UI iş parçacığından farklı bir thread üzerinde tetiklenir; doğrudan bu olay içinden label veya textbox gibi bileşenleri güncellemek çalışma zamanı hatası fırlatır. Çözüm için this.Invoke(new Action(() => label1.Text = veri)); kalıbı kullanılmalıdır. Bu küçük fark, projenin stable çalışması açısından kritik önem taşır.
- Baud rate uyumsuzluğu: Arduino tarafında tanımlanan hız ile C# tarafındaki değer birebir eşleşmelidir. 9600, 57600 ve 115200 standart değerlerdir; keyfi değerler iletişim bozukluğuna neden olur.
- COM port serbest bırakılmaması: Uygulama kapatılırken
serialPort1.Close()çağrılmazsa port işletim sisteminde meşgul kalır. FormunFormClosingolayında portu kapatmak bu sorunu tamamen ortadan kaldırır. - Veri kırpılması (truncation): Yüksek hızda gelen veriler tek bir
DataReceivedçağrısında tam satır içermeyebilir. Bir string tamponu tutarak satır sonlandırıcısına (\n) kadar biriktirmek daha güvenilir sonuç verir. - Port listesi güncellenmemesi: ComboBox doldurulurken mevcut COM portlarını
SerialPort.GetPortNames()ile dinamik sorgulamak, cihazın sonradan takılı olduğu durumları kapsar; sabit listeler bu koşullarda çalışmaz.
Proje büyüdükçe port yönetimini ve veri ayrıştırma mantığını ayrı bir sınıfa ya da servis katmanına taşımak, kodun test edilebilirliğini ve bakımını ciddi ölçüde kolaylaştırır. Özellikle birden fazla Arduino’yu aynı anda bağlamak istediğiniz senaryolarda bu ayrım kaçınılmaz hale gelir.
Projeyi İleri Taşımak: Gerçek Zamanlı Grafik ve Veri Kaydı
Temel LED açma/kapama uygulamasının ötesinde Arduino’dan sürekli okunan sensör verilerini (sıcaklık, nem, mesafe, ışık şiddeti) Windows Form üzerinde anlık olarak görselleştirmek mümkündür. Windows Forms’un yerleşik Chart kontrolü, ek bir kütüphane gerektirmeksizin gerçek zamanlı çizgi grafikleri oluşturmayı sağlar. Her yeni ölçüm değeri bir DataPoint olarak seriye eklenir; sayfada tutulacak maksimum nokta sayısı belirlenerek liste başından silme yapılır, böylece ekran dolup taşmaz.
Uzun süreli ölçümleri kalıcı olarak saklamak için System.IO.StreamWriter ile CSV formatında dosyaya yazmak yeterlidir. Her satırın başına DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") zaman damgası eklenerek oluşturulan kayıt, Excel veya Python/pandas ile kolayca analiz edilebilir. Bu yöntem; ev hava durumu istasyonu, güç tüketimi izleme ve küçük ölçekli endüstriyel proses takibi gibi gerçek projelerde sıkça tercih edilen bir yaklaşımdır. Formu kapatırken StreamWriter nesnesinin de düzgün biçimde kapatılmasına (writer.Close() veya using bloğu) dikkat etmek veri kaybının önüne geçer.
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.
