Arduino Gömülü Sistemler Yazılım

Arduino ve C# – Uygulama II

Merhaba arkadaşlar bugün C# ile yepyeni bir uygulama ile karşınızdayız.

Amaç:

C# üzerinde bir arayüz oluşturarak arduino pinlerine bağlı 4 adet Ledi kontrol etmek.

Hedef:

C# üzerinde arayüz oluşturmayı öğrenmek, C# ve Arduino seri haberleşmesini sağlamak, C# kullanımını öğrenmek

Başlayalım.

Arduino – Donanım bağlantısı

Öncelikle arduino üzerinde gerekli Pin bağlantılarını yapıyoruz

Arduino Kodları

const int Led1 = 13;
const int Led2 = 12;
const int Led3 = 11;
const int Led4 = 10;

void setup() {
  pinMode(Led1, OUTPUT);
  pinMode(Led2, OUTPUT);
  pinMode(Led3, OUTPUT);
  pinMode(Led4, OUTPUT);
  Serial.begin(9600);
 }

void loop() {
if(Serial.available())
{
  char gelen_bilgi = Serial.read();
  if(gelen_bilgi=='1')
  digitalWrite(Led1, HIGH);
  else if(gelen_bilgi=='2')
  digitalWrite(Led1, LOW);
  else if(gelen_bilgi=='3')
  digitalWrite(Led2, HIGH);
  else if(gelen_bilgi=='4')
  digitalWrite(Led2, LOW);
  else if(gelen_bilgi=='5')
  digitalWrite(Led3, HIGH);
  else if(gelen_bilgi=='6')
  digitalWrite(Led3, LOW);
  else if(gelen_bilgi=='7')
  digitalWrite(Led4, HIGH);
  else if(gelen_bilgi=='8')
  digitalWrite(Led4, LOW);
  else if(gelen_bilgi=='0')
  {
    digitalWrite(Led1, LOW);
    digitalWrite(Led2, LOW);
    digitalWrite(Led3, LOW);
    digitalWrite(Led4, LOW);
  }
delay(100);
}
}

Arduino kodlarını ekledik.

10-11-12-13 pinlerine ledleri bağlıyoruz başka bir şey yapmaya gerek yok.

C# Arayüzü oluşturma

Devam

Yukarıdaki forma, toolbox(araç kutusu) menüsünden 2 adet groupbox ekledik. Bunların isimlerini, Seri haberleşme ve Led Kontrol olarak değiştirdik.

Combobox Eklemek

Bir adet combobox ekliyoruz

Amaç: Bu combobox, kullanıcı port seçimini yapsın diye yapıyoruz. Bilgisayara farklı portlar bağlıysa bunların arasından, kullandıgı port seçinimi burada yapabilir.

Aynı zamanda combobox’a veri girişi pasif duruma düşmesi çin, Görünüm özelliklerinden DropDownStyle seçeneğini DropDownList olarak değiştiriyoruz

Form Tasarımı

Formumuz kod yazmadan önce en son şu şekilde bir hal alıyor

Bağlan butonu: . Buton bağlanmayı sağlayacak
Yenile butonu: Bu da bağlı olan portları güncelleyecek. Uygulama esnasında arduino bağlarsak yenileye basmamız yeterli olacak, aksi takdirde programı kapatıp açmamız lazım.

Led Kontrolleri: Tüm ledleri kapatan buton

Checkbox nesnesi : True ve False işlemlerinde kullanılır İsimlerini yazıyoruz. 1.2.3 ve 4. led.

Bunlara işaretlendiğinde led yanacak, işaret kalktıgında, sönecek

En son serial port nesnesi ekliyoruz.

Şimdi formun kodlarına geçiyoruz. Form üzerinde “sağ tık” ve “kodu görüntüle” dersek geçmiş bulunuruz

Form Kodları

Adım adım kodları anlatalım

İlk olarak kütüphaneler kısmına . System.IO.Ports; kütüphanesini ekliyoruz. Kütüphanede sadece bunu eklememiz yeterli

Genel bir değişken atayacağımız için public partial class formuna aşağıdaki diziyi oluşturduk

public partial class Form1 : Form
    {
        String[] portlistesi;
        bool baglanti_durumu = false;

String[] portlistesi; port listesi adında bir dizi oluşturduk. Buraya bağlı olan portların listesi atanacak.

bool baglanti_durumu = false; Baglanti durumu aktifse true, pasifse false olacak bir değişken tanımladık. prgram acıldıgında baglantı olmayacagı için bunu false olarak ayarladık

İkinci adım – Method oluştur

Void portlistele(): Portlistele adında bir method oluşturduk. Çağırdığımızda aşağıdaki kodlar çalışacak

combobox1.Items.Clear(); Program açıldıgı anda combobox içi silinsin
portlistesi = SerialPort.GetPortNames(); Serialporttaki port isimleri, port listesi isimli dizinde listelensin
foreach(string portadi in portlistesi) : Bir fonksiyon, Portlistesi içindeki isimleri portadi değişkenine tek tek atar. comboBox1.Items.Add(portadi); Yukarıda yaptıgım işlem. Bu isimleri Combobox içine atıyor
if(portlistesi[0]!=null) : Eğer portlistesinde port varsa
comboBox1.SelectedItem = portlistesi[0]; : Comboboxda ilk eleman direkt olarak seçilsin.

Üçüncü Adım -Tasarım ekranı komutları yazılır

Tasarım alanı çift tıklanarak Form load alanına geçiş yapıyoruz şu kodları yazıyoruz

groupBox2.Enabled = false; bağlantı olmadan önce ledler false olsun.
portlistele(); basıldığında portlistele tekrardan çalışsın


Yenile butonuna çift tıklıyoruz. Bu buton tekrardan portları tarayıp combobox’e portları getirecek

Şimdi Bağlan butonunun durumunu yazalım

if(baglanti_durumu == false) dogru yazımı böyle yukarıdaki resimde tek eşittir yanlış olmuş.

Olabildigince açıklamalarıla yazmaya calıstım. Copy paste isteyenler için kodları en sona atıcam.

if (baglanti_durumu == false) //eger baglantı yoksa-ilk acıldıgında olmayacak-
{
serialPort1.PortName = comboBox1.GetItemText(comboBox1.SelectedItem); // combo nesnesinde seçili olan item port name olsun
serialPort1.BaudRate = 9600; //bağlantı hızımız
serialPort1.Open(); //seri haberleşmeye başla
comboBox1.Enabled = false; //bagantı saglandı artık combobox kapanabilir.
button2.Enabled = false; //aktif bağlantı varken tıklamaya gerek yok
baglanti_durumu = true; //baglantı durumu artık true olabilir
button1.Text = “Bağlantıyı kes”; //bağlan butonu texti artık baglantıyı kes olsun
groupBox2.Enabled = true; // ledlerin durumu artık değiştirlebilsin.
}
else // burası Çok önemli baglantı durumu true oldugu vakit calısacak dolayısıyla “baglantıyı kes” yazacak . ve bastıgımızda baglantı kesilecek tek butonla iki iş yapıyoruz. İşlevi ise alttak kodlarda açıklanıyor
{
serialPort1.Close(); //baglantıyı kesiyoruz
baglanti_durumu = false;
button1.Text = “Bağlan”;
comboBox1.Enabled = true;
button2.Enabled = true;
groupBox2.Enabled = false;

2. GROUPBOX İŞLEMLERİ ATAMAK

Tüm Ledleri kapat alanına çift ıklayarak bu komutu yaızyoruz. 0 bilgisi arudino kodları içinde tüm ledleri sıfır yapan komut oldugu için . bunu yazıyoruz başka bir işlem yapmaya gerek yok

Checkbox’ların change olayına komut atamak

Normalde üstlerine çift tıklarsak yine bu komutu atayabiliriz. Çünkü en çok kullanılan özellikleri bu. Ancak eğer istersek

Yukarıdaki işlem uygulanarak Olaylardan komut atayabiliriz.

Buraya bu komutları ekliyoruz

Açıklamalar
if (checkBox1.Checked == true) //öncelikle check mi oldu yoksa kaldırıldımı bunu yazıyoruz
serialPort1.Write(“1”);
else
serialPort1.Write(“2”); // tek satırlık bigiler oldugu için parantez açmaya gerek yok.
}

Diğer checkbox’lara da aynı şeyi kopyalayıp yapıştırıyoruz.

C# Program kodlarının tamamını buraya ekliyorum

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 Uygulama2
{
    public partial class Form1 : Form
    {
        String[] portlistesi;
        bool baglanti_durumu = false;

        public Form1()
        {
            InitializeComponent();
        }
        void portlistele()
        {
            comboBox1.Items.Clear();
            portlistesi = SerialPort.GetPortNames();
            foreach(string portadi in portlistesi)
            {
                comboBox1.Items.Add(portadi);
                if(portlistesi[0]!=null)
                {
                    comboBox1.SelectedItem = portlistesi[0];
                }
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (baglanti_durumu == false)    //eger baglantı yoksa-ilk acıldıgında olmayacak-
            {
                serialPort1.PortName = comboBox1.GetItemText(comboBox1.SelectedItem); // combo nesnesinde seçili olan item port name olsun
                serialPort1.BaudRate = 9600;    //bağlantı hızımız
                serialPort1.Open();             //seri haberleşmeye başla
                comboBox1.Enabled = false;      //bagantı saglandı artık combobox kapanabilir.
                button2.Enabled = false;    //aktif bağlantı varken tıklamaya gerek yok
                baglanti_durumu = true;     //baglantı durumu artık true olabilir
                button1.Text = "Bağlantıyı kes";    //bağlan butonu texti artık baglantıyı kes olsun
                groupBox2.Enabled = true;           // ledlerin durumu artık değiştirlebilsin.
            }
            else  // tam bir programcılık dehası. burası baglantı durumu true oldugu vakit calısacak dolayısıyla baglantıyı kes yazacak . ve bastıgımızda baglantı kesilecek tek butonla iki iş
            {
                serialPort1.Close();
                baglanti_durumu = false;
                button1.Text = "Bağlan";
                comboBox1.Enabled = true;
                button2.Enabled = true;
                groupBox2.Enabled = false;

            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            groupBox2.Enabled = false;
            portlistele();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            portlistele(); //basıldığında portlistele tekrardan çalışsın
        }

        private void button3_Click(object sender, EventArgs e)
        {
            serialPort1.Write("0");
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked == true) //öncelikle check mi oldu yoksa kaldırıldımı bunu yazyoruz
                serialPort1.Write("1");
            else
                serialPort1.Write("2");     // tek satırlık bigiler oldugu için parantez açmaya gerek yok.
        }

        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox2.Checked == true) 
                serialPort1.Write("3");
            else
                serialPort1.Write("4");
        }

        private void checkBox3_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox3.Checked == true) 
                serialPort1.Write("5");
            else
                serialPort1.Write("6");
        }

        private void checkBox4_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox4.Checked == true) //öncelikle check mi oldu yoksa kaldırıldımı bunu yazyoruz
                serialPort1.Write("7");
            else
                serialPort1.Write("8");
        }
    }
}

Similar Posts

2 thoughts on “Arduino ve C# – Uygulama II
  1. Hocam rölemin ledleri yanıyor ama teklemiyor acaba neyi yanlış yapıyor olabilirim lütfen acıl döniş yaparsanız seviniri teşekkürler.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir