Ara 24, 2024, 12:46 ÖÖ

Haberler:

Merhaba Lütfen destek için
Forumdaki ekleri semaları görebilmeniz için lütfen üye olunuz teşekkürler
Please register to see attachments and diagrams in the forum


ÇEŞİTLİ DENEMELER

Başlatan Yörük, Şub 04, 2021, 12:43 ÖS

« önceki - sonraki »

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Yörük

Üzerinde çalışabileceğimiz örnek menü şekillendirme  ve lcd kullanım tanımlarına ilişkin farklı uygulamalar taslaklar ,,

Yörük

menü uygulamaları na örnekler verelim kısaca ;
unsigned char MenuID;

main icersinde,

while(1)
{
      if(MenuID == 0) Ana_Menu();
      if(MenuID == 1) Ayarlar_Menu();
      if(MenuID == 2) Cart_Menu();
      if(MenuID == 3) Curt_Menu();
       .
       .
       .

}while(1)
{
      while(MenuID == 0)
       {
            // ana menu kismi


       }
      while(MenuID == 1)
      {
           //ayarlar menusu kismi

          while(MenuID == 2)
          {
               cart menu kismi
           }

      }

}
bu şekilde karmaşaya yol açacaktır  ; ama menu_ıd gibi yaparisek biraz daha sakin olabilir ,
alt_menu_ıde gibi mesela menünün daha çok dallanmasıını karışmasını azaltabilr yada , farklı bir uygulama ile  dener isek ;
const char MenuBasliklar[20][16]={"Menu Secenek1   ",
                                  "Menu Secenek2   ",
                                  .............................   }
İki satır kodla tablo içinde ki tüm menüleri sırayla gösterebilir, aralarında gezebiliriz.

LCD ikinci satırı içinde sayısal değerler ayarlanıyorsa MenuID değeri ile ilişkili bir değer tablosu tanımlıyorum;

KodSeç
int8 Degerler[20]={0,6,77,84,121.........}



KodSeç
lcd_gotoxy(1,2);
printf(lcd_putc,"%d",Degerler[MenuID]);


Bu şekilde yapınca kodun hem okunabilirliği artıyor hem de bellekte kapladığı alan çok çok azalıyor. Ayrıca sayısal parametreler için alt limit, üst limit tanımlaması tablolar kullanılarak yapılırsa ilerde yapılacak değişiklikler daha kolay oluyor.

Yörük

merhaba ; Arduino lcd kütüphanelerini nasıl kullanırız deneyelim ;
LCD Görüntüleme Seçenekleri
LiquidCrystal kütüphanesinin kullanabileceğimiz 19 farklı fonksiyonu vardır. Bu fonksiyonların yazının konumunu değiştirme, ekran boyunca yazıyı kaydırma veya görüntüyü açıp kapatmak gibi işlevleri vardır. Şimdi bu fonksiyonları kısaca inceleyelim:

Arduino LCD Komutları
LiquidCrystal ( )
İşlevi Arduino'nun LCD'ye bağlanmak için kullandığı pinleri ayarlar. LCD'yi kontrol etmek için Arduino'nun dijital pinlerinden herhangi birini kullanabilirsiniz. Arduino pin numaralarını bu sırayla parantez içine koyunuz: LiquidCrystal (RS, E, D4, D5, D6, D7). RS, E, D4, D5, D6, D7 LCD pinleridir.

Örneğin, LCD pini D7'nin Arduino pin 12'ye bağlanmasını istediğinizi varsayalım. D7'nin yerine şu şekilde "12" koyunuz: LiquidCrystal (RS, E, D4, D5, D6, 12). Bu işlev, programın void setup () bölümünün önüne yerleştirilmelidir.

lcd.begin ( )
Bu işlev LCD'nin boyutlarını ayarlar. Programın void setup () bölümünde herhangi bir LiquidCrystal işlevinin önüne yerleştirilmelidir. Satır ve sütunların sayısı lcd.begin (sütunlar, satırlar) olarak belirtilir. 16×2 LCD için, lcd.begin (16, 2) kullanmanız gerekiyor ve 20×4 LCD için lcd.begin (20, 4) kullanmanız gerekiyor.

lcd.clear ( )
Bu işlev, LCD'de halihazırda görüntülenen herhangi bir metni veya veriyi siler. lcd.print ( ) ile lcd.clear ( ) öğesini ve void loop ( ) bölümünde delay ( ) işlevini kullanırsanız, basit bir yanıp sönen metin programı oluşturabilirsiniz:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
lcd.begin(16, 2);
}

void loop() {
lcd.print("hello, world!");
delay(500);
lcd.clear();
delay(500);
}
Bu kodu Arduino'larınıza yüklediğinizde LCD ekranınız aşağıdaki gibi gözükecektir:



lcd.home ( )
Bu işlev, imleci ekranın sol üst köşesine yerleştirir ve sonraki metni bu konuma yazdırır. Örneğin, aşağıdaki kod "hello, world!" metninin ilk üç harfini X ile değiştirir:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
lcd.begin(16, 2);
lcd.print("hello, world!");
}

void loop() {
lcd.home();
lcd.print("XXX");
}
Ekranınız şu şekilde gözükecektir:



lcd.setCursor ( )
Benzer, ancak lcd.home ( ) 'dan daha kullanışlıdır. Bu işlev, imleci (ve herhangi bir yazılı metni) ekranın herhangi bir yerine yerleştirir. Programınızın void setup ( ) veya void loop ( ) bölümünde kullanılabilir.

İmleç konumu, lcd.setCursor (sütun, satır) ile tanımlanır. Sütun ve satır koordinatları sıfırdan başlar (sırasıyla 0-15 ve 0-1). Örneğin, yukarıdaki "hello, world!" programının void setup ( ) bölümünde lcd.setCursor (2, 1) kullanılarak, "hello, world!" alt satıra yazdırılır ve sağa iki alan kaydırılır.

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
lcd.begin(16, 2);
lcd.setCursor(2, 1);
lcd.print("hello, world!");
}

void loop() {

}
Yukarıdaki kodu Arduino'ya yüklediğinizde ekranınız aşağıdaki gibi gözükecektir:



lcd.write ( )
LCD'ye farklı tipte veri yazmak için bu işlevi kullanabilirsiniz, örneğin bir sıcaklık sensöründen okuma veya bir GPS modülünden gelen koordinatlar. Kendiniz oluşturduğunuz özel karakterleri yazdırmak için de kullanabilirsiniz. Programınızın void setup ( ) veya void loop ( ) bölümünde lcd.write ( ) öğesini kullanabilirsiniz.

lcd.print ( )
Bu işlev, LCD'ye metin yazdırmak için kullanılır. Programın void setup () bölümünde veya void loop () bölümünde kullanılabilir.

Harfleri ve sözcükleri yazdırmak için, metnin etrafına tırnak işaretleri (" ") yerleştirin. Örneğin; hello, world!'ü yazdırmak için yukarıda lcd.print ("hello,world!") kullanmıştık.

Sayıları yazdırmak için tırnak işaretleri gerekmez. Örneğin; 123456789'u yazdırmak için lcd.print (123456789) yazabilirsiniz.

lcd.print ( ); sayıları ondalık, ikili, onaltılık ve sekizlik bazlarda yazdırabilir. Örneğin:

lcd.print (100, DEC) "100" yazar.
lcd.print (100, BIN) "1100100" yazar.
lcd.print (100, HEX) "64" yazar.
lcd.print (100, OCT) "144" yazar.
lcd.Cursor( )
Bu işlev görünür bir imleç oluşturur. İmleç, LCD'ye yazdırılacak bir sonraki karakterin altına yerleştirilmiş yatay bir çizgidir.

lcd.noCursor ( ) işlevi imleci kapatır. lcd.cursor ( ) ve lcd.noCursor ( ) birçok metin giriş alanında gördüğünüze benzer yanıp sönen imleci yazdırmak için void loop ( ) bölümünde birlikte kullanılabilir.

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
lcd.begin(16, 2);
lcd.print("hello, world!");
}

void loop() {
lcd.cursor();
delay(500);
lcd.noCursor();
delay(500);
}
Yukarıdaki kodu yüklediğinizde ekranınız şu şekilde gözükecektir:



İmleçler, lcd.setCursor ( ) işleviyle ekranın herhangi bir yerine yerleştirilebilir. Bu kod "hello, world!" deki ünlem işaretinin hemen altına yanıp sönen bir imleç yerleştirir:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
lcd.begin(16, 2);
lcd.print("hello, world!");
}

void loop() {
lcd.setCursor(12, 1);
lcd.cursor();
delay(500);
lcd.setCursor(12, 1);
lcd.noCursor();
delay(500);
}


lcd.blink ( )
Bu işlev, döngü başına yaklaşık 500 milisaniyede bir yanıp sönen blok stili bir imleç oluşturur. Bunu void loop ( ) bölümünde kullanın. lcd.noBlink ( ) işlevi yanıp sönen blok imlecini devre dışı bırakır.

lcd.display ( )
Bu işlev, LCD ekrana yazdırılmış herhangi bir metin veya imleci açar. lcd.noDisplay ( ) işlevi, LCD'nin belleğinden silmeden LCD'ye yazdırılan herhangi bir metni veya imleci kapatır.

Bu iki işlev, yanıp sönen bir metin efekti oluşturmak için void loop ( ) bölümünde birlikte kullanılabilir. Bu kod "hello, world!" metnini açıp kapatacak:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
lcd.begin(16, 2);
lcd.print("hello, world!");
}

void loop() {
lcd.display();
delay(500);
lcd.noDisplay();
delay(500);
}
lcd.scrollDisplayLeft ( )
Bu işlev, LCD'ye yazdırılan her şeyi alır ve sola taşır. Bunu takiben bir gecikme komutu ile void loop ( ) bölümünde kullanılmalıdır. İşlev, ilk karaktere geri dönmeden önce metni 40 alan sola taşır. Bu kod, "hello, world!" metnini, karakter başına bir saniyede olmak üzere sola taşır:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
lcd.begin(16, 2);
lcd.print("hello, world!");
}

void loop() {
lcd.scrollDisplayLeft();
delay(1000);
}


lcd.scrollDisplayRight( )
Bu işlev, lcd.scrollDisplayLeft ( ) gibi davranır ancak metni sağa taşır.

lcd.autoscroll( )
Bu işlev bir metin dizisi alır ve dizinin karakter sayısının artışlarıyla sağdan sola kaydırır. Örneğin; 3 karakter uzunluğunda bir metin diziniz varsa, her adımda metni 3 alan sola kaydırır:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
lcd.begin(16, 2);
}

void loop() {
lcd.setCursor(0, 0);
lcd.autoscroll();
lcd.print("ABC");
delay(500);
}
Bu kodu çalıştırdığınızda ekranınız aşağıdaki gibi gözükecektir:



lcd.scrollDisplay ( ) işlevleri gibi; metin, tekrarlanmadan önce en fazla 40 karakter uzunluğunda olabilir. İlk bakışta, bu işlev kullanışsız gözüküyor olabilir, ancak özel karakterlerle animasyon oluşturmak için çok yararlı olabilir.

lcd.noAutoscroll( )
lcd.noAutoscroll ( ), lcd.autoscroll ( ) işlevini kapatır. Kayan metin veya animasyon dizileri oluşturmak için void loop ( ) bölümünde lcd.autoscroll ( ) işlevinden önce veya sonra bu işlevi kullanabilirsiniz.

lcd.rightToLeft()
Bu işlev, metnin ekrana yazdırıldığı yönü ayarlar. Varsayılan mod, lcd.leftToRight ( ) komutunu kullanarak soldan sağa doğrudur, ancak metnin ters yönde yazılışının yararlı olduğu bazı durumlar bulabilirsiniz:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
lcd.begin(16, 2);
lcd.setCursor(12, 0);
lcd.rightToLeft();
lcd.print("hello, world!");
}

void loop() {

}

lcd.createChar ( )
Bu komut kendi özel karakterlerinizi oluşturmanıza izin verir. 16×2 LCD'nin her bir karakterinin 5 piksel genişliği ve 8 piksel yüksekliği vardır. Tek bir programda 8 farklı özel karakter tanımlanabilir. Kendi karakterlerinizi tasarlamak için, özel karakterinizin ikili karakter matrisini LCD karakter jeneratöründen yapmanız veya kendiniz haritalamanız gerekir. Aşağıdaki kod bir derece sembolü (°) oluşturur:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
byte customChar[8] = {
0b00110,
0b01001,
0b01001,
0b00110,
0b00000,
0b00000,
0b00000,
0b00000
};

void setup()
{
lcd.createChar(0, customChar);
lcd.begin(16, 2);
lcd.write((uint8_t)0);
}

void loop() {
}


 

Arduino Lcd i2c Kullanımı
Normal şartlarda arduino ile 16*2 lcd ekran kullanmak istersek, haberleştirmek için 8 adet kablo bağlamamız gerekiyor, devre şemasında göründüğü gibi.

Arduino lcd bağlantı
Arduino lcd bağlantı
Bu durum devre şemasını karışık yapmakla kalmıyor projede yer sıkıntısına da neden oluyor. Aynı şekilde arduino da fazladan pin işgal etiği için proje yaparken diğer komponentlere pin yetersiz kalıyor. Bu sorunları çözmek için I2C haberleşme protokolü kullanılıyor. Lcd ekranda bu protokolü kullanabilmemiz için üretilmiş olan modüller mevcut. Bu modüler bazen lcd ekranın üzerinde lehimli olarak satılmakta bazen ise ayrıyeten satılmaktadır.

Lcd ekranı normalde 8 adet pin ile kullanırken, bu modül sayesinde 4 adet pin ile lcd ekranı kullanabiliyoruz. Bu pinler sırasıyla GND, VCC, SDA ve SCL  pinleridir.

Arduino ı2c modülü bağlantısı
Arduino ı2c modülü bağlantısı
Arduino modeline göre I2C pinleri farklılık gösterebilir, aşağıda bulunan tablodan bu pinleri öğrenebilirsiniz

Arduino türü   SDA pini   SCL pini
Arduino Uno   A4   A5
Arduino Mega   20   21
Arduino Leonardo   2   3
Arduino Due   20   21
Arduino Nano   A4   A5
Arduino I2c Lcd Kütüphanesi kurulumu
Arduino ile ı2c modülü kullanabilmek için kütüphane yüklemeniz gerekiyor. Popüler kütüphanelerden birini sizin için eklemdim, indir butonuna basarak kütüphaneyi indirebilirsiniz.

LiquidCrystal_I2C kütüphanesi indir
İndirdiğiniz Kütüphaneyi arduino ide'ye eklemek için "Taslak > Library ekle > Zıp Kitaplığı Ekle..." Segmelerini takip ederek kütüphane yöneticisini açalım.

Arduino Ide Taslak Menüsü
Arduino Ide Taslak Menüsü
Açılan pencerede indirdiğiniz zıp dosyasını bulup seçin. Zıp dosyasını seçmeniz yeterli olacaktır, otomatik olarak kütüphane arduino ıde'ye eklenecektir.

Arduino Ide Kütüphane Çağırma Sayfası
Arduino Ide Kütüphane Çağırma Sayfası
Kütüphane dosyanız bu şekilde yüklendiği zaman sol alt köşede "yüklendi" yazısı çıkması gerekir.

Arduino Ide Arayüzü
Arduino Ide Arayüzü
Kütüphanenin yüklendiğinden emin olmak için manuel kontrol yapabilirsiniz.

Manüel kontrol nasıl yapılır bilmiyorsanız, Arduino ide'ye nasıl kütüphane yüklenir konulu blog yazımızı burdan okumanızı tavsiye ederim.

Arduino İle Lcd Ekrana Yazı Yazma
Arduino ı2c modülü devre şeması
Arduino ı2c modülü devre şeması
Devre şemasındaki gibi bağlantıyı yapıp kütüphaneyi de yüklediyseniz, sırada lcd ekrana yazı yazmak var.

Lcd ekrana yazı yazmak için örnekteki kodu kullanabilirsiniz.

////// pulsearge.com  ////

#include <LiquidCrystal_I2C_AvrI2C.h>
 
LiquidCrystal_I2C_AvrI2C lcd(0x27,16,2);
 
void setup()
{
  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("Hello, world!"); //İlk satıra yazalım
  lcd.setCursor(0,1);
  lcd.print("Maker blog"); //İkinci satıra yazalım
}
 
void loop()
{
}
Yukarıdaki kodu çalıştırdığımızda İlk satıra Hello World, ikinci satıra ise Maker blog yazacaktır.

Ancak ilk çalıştırmada ekranda hiçbir şey gözükmemiş olabilir. I2c modülünün arka kısmında bulunan mavi renkli potansiyometreyle oynayarak ekranın kontrasını ayarlayıp ekranda yazının gözükmesini sağlayabilirsiniz.

Bütün bunları yapmanıza ramen ekranda hala bir şey gözükmüyor ise, kodda belirttiğimiz ı2c arabirimi yanlış olabilir.

I2c Lcd Arabirim Adresi Öğrenme
Genelde ı2c arabirimi 0x27 olarak gelmektedir, fakat bazen farklılık gösterebilir. Bu yüzden proje çalışmadı diye üzülmeyin.

Kendi modülünüzün arabirimini öğrenmeniz için alt tarafta bulunan kodu sizinle paylaştım. Kodu arduinoya yükleyerek serial monitörde ekranınızın arabirim adresini görebilirisiniz.

#include <Wire.h>

boolean DeviceFound = false;
byte error, address;

void setup()
{
    Wire.begin();
    Serial.begin(9600);
    Serial.println("\nI2C Araniyor...");
 
    for(address = 0; address <= 127; address++ )
    {
       Wire.beginTransmission(address);
       error = Wire.endTransmission();

       if (error == 0)
       {
         Serial.print("I2C cihaz bulundu. Adresi: 0x");
         if (address<16)   Serial.print("0");
         Serial.println(address,HEX);
 
         DeviceFound = true;
         break;
       }
       else if (error==4)
       {
         Serial.print("Bilinmeyen hata olustu. Adres: 0x");
         if (address<16)  Serial.print("0");
         Serial.println(address,HEX);
       }
    }
    if (DeviceFound == false)
       Serial.println("Herhangi bir bagli I2C bulunamadi\n");
    else
       Serial.println("Tamamlandi. Kolay gelsin.\n");         
}
 
void loop()
{
}
Kodu derledikten sonra arduinoya yükleyin ve serial monitörü açın. Bu işlemeri doğru yaptıysanız serial monitörünüz aynen bu şekilde gözükecektir.

Arduino serial monitör
Arduino serial monitör
Serial monitörde gördüğünüz 0x27 veya benzeri adresi Arduino kodunuzda LCD sınıfın tanımında örnekteki gibi yazmanız gerekecek.

// Parametreler: (Adres, LCD satır karakter sayısı, LCD satır sayısı)

LiquidCrystal_I2C_AvrI2C lcd(0x27,16,2);
Her şeyi doğru yaptıysanız ekranınıza yazı gözükecektir.

16×2 LCD ile yapabileceğiniz çok güzel şeyler var. Bu işlevlerden bazılarını birleştirmeyi denemenizi öneriyorum.

Yörük

Merhaba .
2x16 lcd ekran tanimlari güzel ve verimli .yeni uygulamalarda artik 128x64 glcd uzerinde duralim