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

  • void loop(){

    if ( ! mfrc522.PICC_IsNewCardPresent())

    return;

    if ( ! mfrc522.PICC_ReadCardSerial())

    return;

    dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);

    if((read_rfid)!=ok_rfid_alarm)
    Serial.println(read_rfid);
    {lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print ("BEKLEYINIZ!!!!");

    delay(2000);
    serialEvent();

    }

    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;
    }
    delay(750);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("KARTINIZI OKUTUN");

    }

    bu kod ta Text in başında neden 33 rakamı geliyor sizce

En Son İçerik

Uygulamalı Projeler İle Arduino Eğitimi

Kapsamlı ve Uygulamalı Arduino Eğitimi Hayalindeki arduino projelerini gerçekleştirmek için bugün arduino eğitimine başla. Öğrenirken en iyi yöntem olan uygulayarak…

5 saat Önce

Scratch Örnekleri – Scratch Oyun Yapımı Projeleri(Videolu 18 Ders)

Scratch eğitimi alarak sen de kodlamaya başlamak mı istiyorsun? Eğer öyle ise, çok güzel bir içeriğe denk geldin :) Bir…

5 gün Önce

Flip Flop Devresi İle Alakalı Bilmek İstediğiniz Her Şey

Arkadaşlar merhaba, bu yazıda flip-flopların ne olduğuna ve flip-flop çeşitlerine göz atacağız. Ayrıca elektroniğe yeni başlayanların vazgeçilmez devrelerinden olan flip-flop…

2 hafta Önce

OctoPrint: Raspberry Pi ile 3D Yazıcını Uzaktan Kontrol Et

Herkese merhabalar! Bu yazıcımızda OctoPrint ile 3 boyutlu yazıcınızı uzaktan nasıl kontrol edebileceğinizden bahsedeceğiz. OctoPrint nedir, ne amaçla kullanılır, nasıl…

2 hafta Önce

Creality 3D Yazıcı Modellerini İnceliyoruz – Hangi 3D Yazıcıyı Almalısın?

Merhabalar herkese, bu yazımızda son zamanların öne çıkan 3 boyutlu yazıcı markası olan Creality 3D yazıcıların öne çıkan özelliklerini, bu…

1 ay Önce

Arduino, PIR Sensör ve RC522 RFID Modülü ile Güvenlik Sistemi

Herkese merhabalar, bu yazımızda Arduino, PIR sensör ve RC522 RFID Modülü kullanarak kendi kapı alarmımızı yapacağız. Yaptığımız alarm, bir butona…

3 ay Önce