Arduino-C# haberleşmesi

Öncelikle Herkese Merhaba

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

Arduino kısmından bahsetmeyeceğim, C# kısmı şu şekilde;

C# kısmı

Öncelikle kullanacağımız kütüphaneleri ekliyoruz. Kamera görüntüsü için Aforge kütüphanesi, Haberleşme için IO kütüphanesi.

	
using System.IO.Ports;
using AForge.Video;
using AForge.Video.DirectShow;

Bluetooth cihazları ve kameralar için birer Global değişken oluşturuyoruz

	
FilterInfoCollection cihazlar;
VideoCaptureDevice kamera;

Portlardan alınan bilgiler ile bluetooth cihazlarını ve kameralarını combobox’lara dolduruyoruz

	
if (serialPort1.IsOpen) serialPort1.Close();
            combohizlar.Items.Clear();
            comboportlar.Items.Clear();
            combohizlar.Items.Add("9600");
            cihazlar = new FilterInfoCollection(FilterCategory.VideoInputDevice);
            foreach (string portlar in SerialPort.GetPortNames()) comboportlar.Items.Add(portlar);
            foreach (FilterInfo cihaz in cihazlar)
            {
                cmbKamera.Items.Add(cihaz.Name);
            }
           
            kamera = new VideoCaptureDevice();												 

Şimdi seçilen portlara göre hangi cihaza bağlanacağını ayarlıyoruz. Bağlanma sağlanamazsa ekrana hata mesajı basıyoruz.

	
private void button6_Click_1(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                serialPort1.Close();
              //  btnbaglan.Text = "Bağlan";

            }
            try
            {
                  if (!serialPort1.IsOpen)
                  {
                    serialPort1.PortName = comboportlar.SelectedItem.ToString();

                    serialPort1.BaudRate = Convert.ToInt32(combohizlar.SelectedItem);
                    MessageBox.Show("Bağlandı!");
                   }
            }
            catch
            { }
          

            try
            {
                serialPort1.Open();              
                serialPort1.Write("*");
              
            }
            catch
            {
                MessageBox.Show("Bağlantı Kurulmadı: \n" + serialPort1.PortName.ToString() + " " + serialPort1.BaudRate.ToString());
                return;
            };
        }										 

Basılan butonlara göre arduinoya gönderilecek char verilerini belirleyip port üzerinden gönderme işlemi yapıyoruz. İşlem başarısız olursa ekrana hata mesajı basıyoruz.

private void button1_Click_1(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Write('w'.ToString());
                lbDurum.Text = "İleri Gidiyor!";
            }
           catch
            {
                MessageBox.Show("İleri Gitmiyor!");

            }
        }

        private void button3_Click_1(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Write('a'.ToString());
                lbDurum.Text = "Sola Gidiyor!";
            }
            catch
            {
                MessageBox.Show("Sola Gitmedi");
            }
        }

        private void button5_Click_1(object sender, EventArgs e)
        {
            try
            {
                 serialPort1.Write('x'.ToString());
                lbDurum.Text = "Durdu!";
            }
          catch
            {
                MessageBox.Show("Durmadi!");
            }
        }

        private void button4_Click_1(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Write('d'.ToString());
                lbDurum.Text = "Sağa Gidiyor!";
            }
         catch
            {
                MessageBox.Show("Sağa Gitmedi");
            }
        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            try
            {
                 serialPort1.Write('s'.ToString());
                lbDurum.Text = "Geri Gidiyor!";
            }
            catch
            {
                MessageBox.Show("Geri gitmedi!");
            }
           
        }									 

Kameraya bağlanma ve görüntü alma işlemlerini yapıyoruz

   private void button7_Click_1(object sender, EventArgs e)
        {
            if (kamera.IsRunning)
            {
                kamera.Stop();
                pictureBox2.Image = null;
                pictureBox2.Invalidate();
            }
            else
            {
                kamera = new VideoCaptureDevice(cihazlar[cmbKamera.SelectedIndex].MonikerString);
                kamera.NewFrame += new NewFrameEventHandler(cam_NewFrame);

                kamera.Start();//kamerayı başlatıyoruz.
            }

        }									 

Son olarak Kameradan alınan görüntü için bir bitmap oluşturuyoruz ve görüntüyü buraya atıyoruz

private void cam_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            Bitmap bit = (Bitmap)eventArgs.Frame.Clone();
            pictureBox2.Image = bit;
        }												 

Kodun birleştirilmiş hali de şu şekilde;

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;
using AForge.Video;
using AForge.Video.DirectShow;
namespace TankKontrol
{
    public partial class Form1 : Form
    {
        FilterInfoCollection cihazlar;
        VideoCaptureDevice kamera;
        public Form1()
        {
            InitializeComponent();
        }
        public delegate void AddDataDelegate(String myString);
        public AddDataDelegate myDelegate;
        private void Form1_Load(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen) serialPort1.Close();
            combohizlar.Items.Clear();
            comboportlar.Items.Clear();
            combohizlar.Items.Add("9600");
            cihazlar = new FilterInfoCollection(FilterCategory.VideoInputDevice);
            foreach (string portlar in SerialPort.GetPortNames()) comboportlar.Items.Add(portlar);
            foreach (FilterInfo cihaz in cihazlar)
            {
                cmbKamera.Items.Add(cihaz.Name);
            }
           
            kamera = new VideoCaptureDevice();

        }
        private void cam_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            Bitmap bit = (Bitmap)eventArgs.Frame.Clone();
            pictureBox2.Image = bit;
        }
        private void button6_Click_1(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                serialPort1.Close();
              //  btnbaglan.Text = "Bağlan";

            }
            try
            {
                  if (!serialPort1.IsOpen)
                  {
                    serialPort1.PortName = comboportlar.SelectedItem.ToString();

                    serialPort1.BaudRate = Convert.ToInt32(combohizlar.SelectedItem);
                    MessageBox.Show("Bağlandı!");
                   }
            }
            catch
            { }
          

            try
            {
                serialPort1.Open();              
                serialPort1.Write("*");
              
            }
            catch
            {
                MessageBox.Show("Bağlantı Kurulmadı: \n" + serialPort1.PortName.ToString() + " " + serialPort1.BaudRate.ToString());
                return;
            };
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Write('w'.ToString());
                lbDurum.Text = "İleri Gidiyor!";
            }
           catch
            {
                MessageBox.Show("İleri Gitmiyor!");

            }
        }

        private void button3_Click_1(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Write('a'.ToString());
                lbDurum.Text = "Sola Gidiyor!";
            }
            catch
            {
                MessageBox.Show("Sola Gitmedi");
            }
        }

        private void button5_Click_1(object sender, EventArgs e)
        {
            try
            {
                 serialPort1.Write('x'.ToString());
                lbDurum.Text = "Durdu!";
            }
          catch
            {
                MessageBox.Show("Durmadi!");
            }
        }

        private void button4_Click_1(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Write('d'.ToString());
                lbDurum.Text = "Sağa Gidiyor!";
            }
         catch
            {
                MessageBox.Show("Sağa Gitmedi");
            }
        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            try
            {
                 serialPort1.Write('s'.ToString());
                lbDurum.Text = "Geri Gidiyor!";
            }
            catch
            {
                MessageBox.Show("Geri gitmedi!");
            }
           
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.W)
                lbDurum.Text = "w";
        }

        private void cmbKamera_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }

        private void button7_Click_1(object sender, EventArgs e)
        {
            if (kamera.IsRunning)
            {
                kamera.Stop();
                pictureBox2.Image = null;
                pictureBox2.Invalidate();
            }
            else
            {
                kamera = new VideoCaptureDevice(cihazlar[cmbKamera.SelectedIndex].MonikerString);
                kamera.NewFrame += new NewFrameEventHandler(cam_NewFrame);

                kamera.Start();//kamerayı başlatıyoruz.
            }

        }

        private void button8_Click_1(object sender, EventArgs e)
        {
            if (kamera.IsRunning)
                kamera.Stop();
            else
                MessageBox.Show("Zaten çalışmıyor");
        }

  
        }
    
}

Görüntüler

Programın Çalışırken ki ekran görüntüsü

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir