Alışverişlerinizi Robotistan’dan Yapın

Faydalı içerikler oluşturarak size yardımcı olmak istiyoruz. Aynı zamanda hızlı teslimat ve müşteri memnuniyetini ön planda tutarak malzeme satışı yapıyoruz. Alışverişlerini robotistan.com‘dan yaparak sen de bize yardımcı olabilirsin 🙂

Arduino ve C# ile LCD Ekrana Yazı Gönderme – 7. Ders

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! 🙂

Yorumları Görüntüle

  • serialPort.PortName = comboBox1.Text;
    serialPort.BaudRate = 9600;
    serialPort.Parity = Parity.None;
    serialPort.DataBits = 8;
    serialPort.StopBits = StopBits.One;
    serialPort.Open();
    serailPort hata veriyor sebebi nedir hata kodu:
    Hata CS0103 serialPort' adı geçerli bağlamda yok

En Son İçerik

Arduino ve C# Haberleşmesi: E-posta ile Veri Gönderimi – 8. Ders

Sonraki Ders > < Önceki Ders Arkadaşlar merhaba, bu derste C# ile gmail üzerinden e-posta göndermeyi göreceğiz. Hareket algılama sensörü…

6 saat Önce

Dünya Birincisi Türkiye’den! MakeX 2019

Uluslararası MakeX Robotik Yarışması, dünya çapında en prestijli robotik yarışması olma hedefiyle 2017'den bu yana düzenlenmektedir. Ağırlıklı olarak 6-19 yaş…

2 gün Önce

Algoritma Nedir? Niçin Kullanılır? Algoritma Örnekleri

Merhaba arkadaşlar, bu yazımızda sizlere matematikte ve programlamada sıkça karşımıza çıkan algoritma teriminden bahsedeceğim. Algoritma Kavramını Öğrendikten Sonra Bir Dil…

2 hafta Önce

Kodris Studio Nedir? Kodlama İçin Neden Tercih Etmelisin?

Herkese merhabalar! Henüz nasıl kodlama öğreneceğinize karar vermediniz mi? Eğer ilköğretim ve lise düzeyinde öğrenciyseniz ve kodlam öğrenmeye giriş yapmak…

1 ay Önce

Arduino’nun Korkulu Rüyası: ESP8266

Herkese merhabalar! Daha önce hiç kablosuz internet bağlantısı ile proje yaptınız mı? IoT projelerine ilginiz var mı? Sizi bu yazımızda…

1 ay Önce

3D Printer Yapımı – 553TL’ye Kendi 3D Yazıcını Yap

Herkese merhabalar! Bu yazımızda üç boyutlu yapımı için hangi adımları uygulamak gerekiyor, 3D yazıcı yapımı için gerekli olan malzemelerden ve…

2 ay Önce