Arkadaşlar merhaba, bu dersimizde C# ile hazırlayacağımız form uygulaması üzerinden Arduino’ya bağlı LCD ekranımızı kontrol etmeyi göreceğiz. Eğer “Arduino ve C# ile Seri Haberleşme” serimize bu yazı ile denk geldiyseniz serinin önceki yazılarına da göz gezdirmenizi tavsiye ederiz.

16×2 LCD Ekran Kontrolü

Yapacağımız çalışmada LCD ekran olarak projelerde ve hobi elektroniğinde sıkça karşılaştığımız 16×2 LCD ekran kullanacağız. Yazıda ekran kontrolü ve kurulumu ile ilgili detaylara değinmeyeceğim. Blogumuzda bulunan LCD ekran kontrolü ile ilgili yazıya aşağıdaki linke tıklayarak ulaşabilirsiniz.

>> 16×2 LCD Ekran Kurulum ve Programlama Rehberi

Bağlantı Şeması

Gerekli Malzemeler:

Arduino Kodu

Kod içerisinde önceki yazılardan farklı olarak “SerialEvent()” fonksiyonunu kullandık. Bu fonksiyon içerisine yazdığımız kodlar Arduino seri iletişim halindeyken çalışacaktır. SerialEvent() ile ilgili daha detaylı bilgi için buraya tıklayabilirsiniz.

#include <LiquidCrystal.h>
 const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
 LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
 String text = "";
 bool stringComplete = false;
 void setup() {
   Serial.begin(9600);
   lcd.begin(16,2);
   lcd.print("   Yazi Girin");
 }
 void loop() {
   if (stringComplete) {
     stringComplete = false;
     lcd.clear();
     if (text.length() < 16)
     {
       lcd.print(text);
     } else
     {
       lcd.print(text.substring(0, 16));
       lcd.setCursor(0, 1);
       lcd.print(text.substring(16, 32));
     }
     text = "";
   }
 }
 void serialEvent()
 {
   while (Serial.available()) {
     char inChar = (char)Serial.read();
      if (inChar == '\n') {
       stringComplete = true;
       break;
     }
     text += inChar;
 }
 }

C# Arayüz Tasarımı

Arayüz tasarımı kısmında diğer çalışmalarımızda görmediğimiz bir araç kullanmayacağız. Her zaman yaptığımız gibi portu seçtiğimiz ve bağlantıyı kurduğumuz comboBox ve butonu ekledik. Ardından ekranda görmek isteyeceğimiz yazıyı girdiğimiz bir textBox’u forma dahil ediyoruz. Son olarak da yazıyı göndermeden önce yazının uzunluğunu ve ekran üzerindeki konumunu görmek için “GÖNDER” butonunun altına bir label ekliyorum.

Form Tasarımı

Tasarımın son halini yukarıdaki görselde görebilirsiniz.

C# Proje Kodu

Kod kısmında genel olarak yapacağımız tek şey textBox’tan aldığımız yazıyı porta göndermek, yani oldukça basit. Buna ek olarak tasarım bölümünde bahsettiğim, yazının uzunluğu ile ilgili bilgi veren label için düzenleme yapmamız gerekiyor.

Bildiğiniz gibi Arduino kod kısmında Lcd Ekran’da imlecin konumunu ayarlamak için “setCursor()” fonksiyonunu kullanıyorduk. Bu label’ı da buna benzer bir şekilde kullanacağız. Yazıyı yazarken hangi satır ve sütunda olduğumuzu bu label üzerinden göreceğiz. Örneğin: (2,0) ikinci satırın başında olduğumuzu gösterecek. Bu sayede göndereceğimiz yazının uzunluğu ve ekrandaki konumu hakkında önceden bilgi almış olacağız.

“TextChanged” olayı

Kodun başında counter isminde integer tipinde bir değişkeni tanımladık. Bu fonksiyon içinde counter’ı textBox içine yazdığımız text’in uzunluğuna eşitliyoruz. Bu sayede göndereceğimiz yazının karakter uzunluğunu elde etmiş oluyoruz. Metnin ilk 16 karakteri LCD’nin ilk satırına; eğer 16 karakterden uzun bir metin göndereceksek geri kalan kısım da ikinci satıra yerleşecektir. Buna uygun bir şekilde düzenleme yaparak fonksiyonu tamamlıyorum. Kod içerisine “textBox1.MaxLength = 32” satırını eklediğim için metnin uzunluğu 32 karakteri geçmeyecektir, uzunluk 32 olduğunda da label üzerinden “Maksimum uzunluk” uyarısını alacağız.

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

     namespace arduino_lcd_ekran
     {
     public partial class Form1 : Form
     {
         string text;
         int counter = 0;
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        string[] ports = SerialPort.GetPortNames();  //Seri portları diziye ekleme
        foreach (string port in ports)
            comboBox1.Items.Add(port);

        textBox1.MaxLength = 32; //Kullandığımız LCD ekran maksimum 32 karakter alabildiği için bu şekilde ayarlıyoruz
    }


    private void baglan_Click(object sender, EventArgs e)
    {
        try
        {
            if (!serialPort.IsOpen)
            {
                /* Seri Port Ayarları */
                serialPort.PortName = comboBox1.Text;
                serialPort.BaudRate = 9600;
                serialPort.Parity = Parity.None;
                serialPort.DataBits = 8;
                serialPort.StopBits = StopBits.One;
                serialPort.Open();                   //Seri portu aç
                baglan.Text = "KES";                 //Buton1 yazısını değiştir
            }
            else
            {
                baglan.Text = "BAĞLAN";              //Buton1 yazısını değiştir
                serialPort.Close();                  //Seri portu kapa

            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Hata");      //Hata mesajı
        }
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        text = textBox1.Text;
        counter = text.Length;

        /* Lcd ekrana yazdıracağımız yazının konumu ile ilgili bilgi almak için*/

        if(counter < 16)  //Text uzunluğu 16'dan küçükse
        {
            label2.Text = "(1," + counter.ToString() + ")";
        }
        else if(counter>=16 && counter<32)  //Text uzunluğu 16 ile 32 arasında ise
        {
            counter -= 16; 
            label2.Text = "(2," + counter.ToString() + ")";
        }
        else 
        {
            label2.Text = "Maksimum uzunluk";
        }

    }

    private void gonder_Click(object sender, EventArgs e)
    {
        try
        {
            serialPort.WriteLine(text);  //Text'i gönder
        }

        catch (Exception ex2)
        {
            MessageBox.Show(ex2.Message, "Hata");      //Hata mesajı
        }
    }

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        if (serialPort.IsOpen) serialPort.Close();    //Seri port açıksa kapat
    }
}
}

C# kısmıyla beraber projemizi tamamlamış olduk. Dilerseniz uygulamayı geliştirerek birçok özellik ekleyebilirsiniz. Önceki projede yaptığımız gibi bu projeyi de kablosuz bir şekilde kontrol etmeyi deneyebilirsiniz. Sorularınızı ve görüşlerinizi yorumlarda belirtebilirsiniz, bir sonraki projede görüşünceye dek, hoşça kalın! 🙂

2 Yorumlar

CEVAP VER

Please enter your comment!
Please enter your name here