Bu yazımızda Seri Port Oku/Yaz komutları ile veri göndermeyi ve okumayı inceleyeceğiz. Arduino uygulamalarında çokca kullanılan bir seri port terminal uygulaması yapacağız.

Daha önce Arduino Serial Port yazımızda bu konudan bahsetmiştik. Şimdi C#(sharp) kısmını yazacağız.

Seri portunumuzdan veri almak için karşı tarafta bir seri port desteği olan cihazımızın olamsı gerekmektedir. Bunun için Arduino’ yu kullanabilirsiniz. Eğer arduinonuz yok ise Com Portunuzun 2. ve 3. pinlerini birbirine bağlayabilrisiniz. Bu sayede bilgisayardan gönderilen direk bilgisayara geri gelecektir. 🙂

İlk önce C# da arayüzünüzü aşağıdaki gibi veya kendi istediğiniz gibi ayarlayın.

C# Serial Port Arayüzü

C# Serial Port Arayüzü

SerialPort komponentini arayüzüne sürüklyip bırakın yoksa kodlarınızda hata oluşabilir.

Aşağıdaki kodu inceleyin ve kendi programınızı entegre edin.

/* yazan: www.kaizen40.com
 * tarih: 01.05.2018
 * 
 * açıklama: seri port terminal programı
 */

using System;
using System.IO.Ports;
using System.Threading;
using System.Windows.Forms;

namespace SerialPort
{
    public partial class Form1 : Form
    {
        string[] ports = System.IO.Ports.SerialPort.GetPortNames();            // port bilgisinin tutulduğu yer

        public Form1()
        {
            InitializeComponent();

            FormClosing += Form1_FormClosing;
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(SerialPort1_DataRecieved);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (string port in ports)                              // pc ye takılı olan device ların portlarını ekle
            {
                CmbPort.Items.Add(port);
            }

            // baudrate leri yükle
            CmbBaudRate.Items.Add("300");
            CmbBaudRate.Items.Add("600");
            CmbBaudRate.Items.Add("1200");
            CmbBaudRate.Items.Add("2400");
            CmbBaudRate.Items.Add("4800");
            CmbBaudRate.Items.Add("9600");
            CmbBaudRate.Items.Add("19200");
            CmbBaudRate.Items.Add("57600");
            CmbBaudRate.Items.Add("115200");
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (serialPort1.IsOpen == true)
            {
                serialPort1.Close();
            }
        }

        private void SerialPort1_DataRecieved(object sender, SerialDataReceivedEventArgs e)
        {
            Thread.Sleep(30);

            string data = serialPort1.ReadLine();       // bufferdan verileri oku

            if (TxtGelen.InvokeRequired)
            {
                TxtGelen.Invoke(new MethodInvoker(delegate { TxtGelen.Text += data + "\r\n"; }));
            }
        }

        private void BtnBaglan_Click(object sender, EventArgs e)
        {
            if (BtnBaglan.Text == "Bağlan")    
            {
                BtnBaglan.Text = "Bağlantıyı Kes";
                LabelBaglanti.Text = CmbPort.Text + "," + CmbBaudRate.Text + ", Hat Açık";
                serialPort1.PortName = CmbPort.Text;
                serialPort1.BaudRate = Convert.ToInt32(CmbBaudRate.Text);
                serialPort1.Open();
            }
            else// bağlan
            {
                BtnBaglan.Text = "Bağlan";
                LabelBaglanti.Text = "Hat Kapalı";
                serialPort1.Close();
            }
        }

        private void BtnTemizle_Click(object sender, EventArgs e)
        {
            TxtGelen.Clear();
        }

        private void BtnGonder_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen == true)
            {
                serialPort1.Write(TxtGiden.Text + "\n");
            }
            else
            {
                MessageBox.Show("Port kapalıyken data gönderilemez!");
            }
        }
    }
}

ve programınızı derleyerek çalıştırın. Gönderilen data kısmına bir şeyler yazıp gönder butonuna basın.

C# Serial Port Arayüzü Arduino İletişimi

C# Serial Port Arayüzü Arduino İletişimi

İlerleyen zamanlardan okuma ve yazma ile ilgili daha fazla detay vermeye çalışacağım. Faydalı olmasını dilerim.


6 yorum

Anonim · 20 Nisan 2021 13:02 tarihinde

işime yaradı. teşekkürler.

ertuğ · 14 Şubat 2022 14:33 tarihinde

Com Portunuzun 2. ve 3. pinlerini birbirine—bu kısmı anlamadım

    Remzi Şahinoğlu · 17 Şubat 2022 09:58 tarihinde

    2.ve 3. pinleri birbirine bağlarsanız gönderdiğiniz veriyi aynı şekilde okursunuz. RX ve TX hatları.

      Fatih Burkay · 30 Haziran 2022 12:56 tarihinde

      merhaba
      C# takiTexboxtaki int sayıyı arduinoya nasıl gönderebilirim.

        Remzi Şahinoğlu · 19 Temmuz 2022 22:31 tarihinde

        textbox’ taki int tipindeki değeri textbox’tan okurken string olarak okursunuz. arduino tarafında da string olarak okuduğunuz değeri int tipine çevirip matematiksel işlemler yapabilirsiniz.

        tuna · 14 Ağustos 2022 09:46 tarihinde

        = degisken.ToString();

Bir cevap yazın

Avatar placeholder

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.