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.
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.
İ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();