C# İle Arduino Kontrolü ve Haberleşme Nasıl Yapılır?
Ö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? Bu seride sizlerle, bu gibi projelerin devamını getiriyoruz. 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.
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.

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.
private void Form1_Load(object sender, EventArgs e) { string[] portlar = SerialPort.GetPortNames(); foreach (string port in portlar) comboBox1.Items.Add(portlar); }
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.

Tüm Kod
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO.Ports; namespace WindowsFormsApp4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string[] portlar = SerialPort.GetPortNames(); foreach (string port in portlar) comboBox1.Items.Add(portlar); } private void button2_Click(object sender, EventArgs e) { serialPort1.Write("1"); button1.BackColor = Color.Green; button2.Enabled = false; button3.Enabled = true; } private void button3_Click(object sender, EventArgs e) { serialPort1.Write("0"); button1.BackColor = Color.Red; button2.Enabled = true; button3.Enabled = false; } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { serialPort1.PortName = comboBox1.SelectedItem.ToString(); serialPort1.Open(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (serialPort1.IsOpen) serialPort1.Close(); } } }
Arduino Kodu
Burada Serial.read komutu ile, seri porttan gelen 1 yada 0 değeri ile LEDimizi yakıyoruz.
void setup() { pinMode(8, OUTPUT); Serial.begin(9600); } void loop() { if(Serial.available()) { char a = Serial.read(); if(a == '1') { digitalWrite(8,HIGH); Serial.println("LED YANDI"); } else if(a == '0') { digitalWrite(8,LOW); Serial.println("LED SONDU"); } } }
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. İndirdikten 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.

Merhabalar,
Öncelikle vermiş olduğunuz bilgiler sade ve anlaşılır teşekkür ederim.
Soruma gelecek olursak
C# da text box kutusundaki int veya float tipindeki sayıları arduinoya göndermek ve bu gönderdiğim sayıları arduinoda oluşturduğum değişkenlere atamak istiyorum. Siz örnekte sadece 1 veya 0 rakamı göndermişsiniz fakat ben dediğim gibi int veya float göndermek istiyorum şimdiden teşekkürler
Merhaba aynı yöntem ile gönderebilirsiniz. Daha uzun verileri parçalayarak göndermeniz gerekmektedir. Örnek olarak bu içeriklerimize bakabilirsiniz:
https://devreyakan.com/arduino-ve-c-bluetooth-ile-dc-motor-kontrolu/
https://devreyakan.com/arduino-ve-c-seri-haberlesme-servo-motor-ve-dc-motor-kontrolu/
https://devreyakan.com/arduino-ve-c-rf-haberlesme-ile-dc-motor-kontrolu/
Ayrıca, forum kısmında bir içerik oluşturup kodunuzu paylaşırsanız doğrudan kodunuz üzerinden yardımcı olabiliriz.
Hocam bunu 2 buton ile 2 led yapmak istesek aynı kodu aşagıya yazmamız yeterli oluyormu ?
Evet, gerekli düzenleme ile yapabilirsiniz.
kolay gelsin RFID Kart Okuyucu ile Visual Studio ile C# Form üzerinde bulunan datagridview içinde listelenmiş turnike iplerine kart okutulduğu zaman açma komutu gönderen kod için yardımcı olabilir misiniz?
bunu nasıl yaptınız acaba bu konuda bilgilendirir misiniz
Merhaba, C# program kodu ve Arduino kodu, devre şeması ve adım adım eklenmesi gerekenler düzenli bir şekilde anlatılmıştır, tam olarak nereyi soruyorsunuz?
Saygılarımızla.
Merhaba, Tüm anlatılanları yaptım (Arduino ve C# tasarım kısmını). Lakin, bu arayüz masaüstü kullanım kısmını nasıl oluşturuyoruz ? İkincisi, baslat kısmından test edince tasarladım ekran donuyor herhangi bi tepki alamıyorum, komut veremiyorum.
Yardımcı olurmusunuz. Yani, acıkcası arduino yu usb ile bağladığımda, nasıl bu arayüz ile irtibatlandırıp çalıştırıyoruz. herhangi ekstra bir port seçim yapılıyor mu.
Merhaba, arayüzü soldaki araçları tutup bırakarak yapabilirsiniz. Bağlantı için arduino’yu usb portuna bağlamanız yeterlidir, ardından atanan com portu seçerek bağlanabilirsiniz.
Merhaba RFID Kart Okuyucu ile Visual Studio ile C# Form üzerine yazılmış bir Hastane Randevu sistemi yapmak istiyorum. İçinde veri olan kart okutulduğu zaman C# Form uygulamasına erişim ya da c# form uygulamasını açan bir uygulama düşünüyorum. Yardımcı olabilir misiniz?
Merhaba, mail üzerinden geri dönüş yapıldı.
Arduino bilgisayara bağlı olmasan Windows form uygulaması ile bir şekilde çalıştırabilir miyim? Mail üzerinden iletişime geçerseniz sevinirim.
Merhaba, Arduino kablo aracılığı ile bağlı olmadan her hangi bir uygulama ya da işlem yapabilmek için arada mutlaka bir köprü olmalıdır. Bu köprüyü, RF, nRF, Wi-Fi, Bluetooth modülleri ile kurabilirsiniz, RF ve nRF modülleri ile kuracağınız köprüde mutlaka ikinci bir mikroişlemci(Arduino) gerekir. Fakat Wi-Fi ve Bluetooth aracılığı ile tek bir Arduino kartla bilgisayara bağlantı kurabilirsiniz. Örnek olması açısından NodeMCU ile yaptığımız projeler göz atabilirsiniz. Arduino’ya alternatif olarak kullanabilirsiniz.
NodeMCU ESP8266 ile WiFi Üzerinden OLED Mesaj Uygulaması
NodeMCU ESP8266 Kullanımı ve Fonksiyonları : Bölüm 1
NodeMCU ESP8266 Kullanımı ve Fonksiyonları : Bölüm:2
mBlock ile Arduino! HC05 Bluetooth ile Led Yak