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
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.
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.
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! 🙂
basit ama bi türlü anlayamadığım konu.teşekkürler
İyi çalışmalar 🙂
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
Merhaba, form üstüne eklediğiniz serialPort objesinin ismi serialPort1 şeklindeyse bunu yazıdaki gibi ”serialPort” olarak değiştirebilir misiniz?
teşekkürler
iyi çalışmalar size
Başarılar, kolay gelsin 🙂
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
yok mu bi yorumunuz
Lcd ekran kontrole nasıl girerim?