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

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");
}
}
}
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.
Merhaba,
Rölenin ledleri yanıyor ve tetiklemiyorsa manyetik yapısı bozulmuş olabilir, farklı bir röle ile denemenizi önerebilirim. Hala aynı hata varsa rolenin bağlantılarını kontrol etmenizi öneririm. bu konuda şu yazımıza da bakabilirsiniz
https://www.mekinfo.net/arduino-role-baglantisi/