Bu bloga bakmadan önce Dev Rehber 1‘e göz atmanızı şiddetle tavsiye ederim! 😉

Gerekli Malzemeler:

  1. Arduino Uno (Arduino Nano, Arduino Mega vb.)
  2. Breadboard
  3. 16×2 LCD Ekran (Yeşil veya Mavi) 😄
  4. Muhtelif Erkek-Erkek Jumper Kablo
  5. 10KΩ Potansiyometre (Arka ışık kontrası için, isteğe bağlı)
  6. 220RΩ (Örneklerde kullanacağız)

LCD ve Arduino Bağlantıları

Kullandığımız LCD’deki pinlerin diyagramını aşağıda ki gibidir. LCD ekranımızda 16 adet pinimiz var. Kullanacağımız ekrana göre pinler ekranın üst, alt veya her iki tarafında da olabilir. Çok nadir bazı ekranlarda ise arka aydınlatma ışığı bulunmadığı için 14 adet pin bulunur. 15 ve 16 numaralı pinler, ekran aydınlatması bulunan ekranlarda arka ışığı yakmak için kullanılır, Arka ışıklar LCD’den ayrıdırlar yani arka ışığının pinini bir dijital porta takarak kullanabiliriz. Her bir pinden Arduino’ya olan bağlantılar aynı olacaktır, ancak pinleriniz LCD üzerinden farklı şekilde düzenlenebilir. Bunun için LCD’nin datasheet‘ine bakabilirsiniz.

Uyarı: Breadboard’a bağlamadan önce LCD’nize 16 pinlik bir başlık lehimlemeniz gerekebilir. LCD’yi Arduino’nuza bağlamak için aşağıdaki şemayı takip edin:

sema-16x2-baglanti görseli yüklenemedi. Lütfen yorumlardan bize bildirin!

İsterseniz potansiyometreyi kullanmayabilirsiniz, potansiyometre ile arka ışığının kontrast ayarını yapabiliriz ancak istemiyorsanız V0 pinini direk 5 volt vererek arka ışığı kullanabilirsiniz. Şemayı daha net görmek isterseniz buraya tıklayın.

Arduino IDE’de Programlama

Göreceğimiz kodların tamamı Arduino IDE ile gelen LiquidCrystal kütüphanesidir. Bu kütüphane ile bir çok özellik deneyeceğiz tabi ki dev bir rehber olduğu için LiquidCrystal kütüphanesine’de anlatmadan geçemeyiz. 🙂 Şimdi “nedir bu LiquidCrystal kütüphanesi?” dediğinizi duyar gibiyim. 😄 Hemen anlatayım.

LiquidCrystal Kütüphanesi Nedir?

LiquidCrystal ekranlar (LCD’ler) ile iletişimini sağlar. Bu kütüphane, bir Arduino/Genuino kartının çoğu metin tabanlı LCD’de bulunan Hitachi HD44780 uyumlu yonga setine dayalı LiquidCrystal ekranları (yani LCD’leri) kontrol etmesi olarak tanınır. Kütüphane 4 veya 8 bit modunda çalışır. Buraya tıklayarak GitHub reposundan son sürümünü indirebilirsiniz.

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ı teker teker öğrenelim:

Arduino LCD Komutları

LiquidCrystal( )

Görevi Arduino’nun LCD’ye bağlanmak için kullandığı pinleri belirtir. LCD’yi kontrol etmek için Arduino’nun dijital pinlerinden rastgele birini kullanabiliriz. Arduino pin numaralarını bu sırayla parantez içersinde koymamız gereklidir.

İş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, enable, d4, d5, d6, d7); RS, E, D4, D5, D6, D7 LCD pinleridir.

NOT: Ekranı ’lcd’ olarak adlandırdığımıza dikkat edin. “ekran” gibi isterseniz farklı bir isim verebilirsiniz. Eğer değiştirirseniz yazının geri kalanında lcd’yi yeni adla değiştirmeniz gerekecektir.

// kütüphaneyi ekliyoruz:
#include <LiquidCrystal.h>
// bir LCD tanımı oluşturduk. Parametreler: (RS, E, D4, D5, D6, D7):
LiquidCrystal lcd(12, 11, 4, 5, 6, 7);

Örneğin, LCD pini D7’nin Arduino pininden 2’ye bağlanmasını istediğinizi varsayalım. D7’nin yerine şu şekilde “7” koyunuz: LiquidCrystal (RS, E, D4, D5, D6, 12);. Bu işlev, programın void setup (); bölümünün önüne yerleştirmeliyiz çünkü pinleri tanımlama yapıyoruz eğer en üste yerleştirmezsek hata alırız.


lcd.begin( )

Bu komut, LCD’nin boyutlarını ayarlar. Programın void setup (); bölümünde herhangi bir LiquidCrystal işlevinin önüne koyulmalıdır. Satır ve sütunların sayısını lcd.begin(sütunlar, satırlar); olarak belirtilmelidir. Bu parametreler aracılığı ile LCD ekranımızın kaç satır ve kaç sütun olduğunu belirtiriz. 16x2 LDC’lerde, lcd.begin(16, 2); kullanmamız gerekiyor veya 20x4 LCD içinde lcd.begin(20, 4); kullanabilirsiniz.

#include <LiquidCrystal.h> // kütüphaneyi ekledik

LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // hangi pinlerde olduğunu belirttik

void setup() {
  lcd.begin(16, 2); // 16 sütun 2 karakter, LCD aktif
}

lcd.print("")

Bu komut, void setup(); veya void loop(); bölümünde kullanılabilir. LCD ekranın ilk sütununa ve satırına bir mesaj yazdırır. Kullanımı: lcd.print ("mesaj"); ile ekrana yazdırılır. Metnin etrafına tırnak işaretleri ("") koymanız gerektiğini unutmayın. Sayıları veya değişkenleri yazdırmak istediğinizde, tırnak işareti gerekmez. lcd.print(); ile sayıları ondalık, ikili, onaltılık ve sekizlik tabanda yazdırabilir. Hemen bir örnek yapalım:

#include <LiquidCrystal.h> // kütüphaneyi ekledik

LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // hangi pinlerde olduğunu belirttik

void setup() {
  lcd.begin(16, 2); // 16 sütun 2 karakter, LCD aktif
  lcd.print("Merhaba Dunya"); // ekrana Merhaba Dunya yazdırdık
}

void loop() {
}

LCD Ekranda şekilde gözükecektir:

lcd-merhaba-dunya görseli yüklenemedi. Lütfen yorumlardan bize bildirin!

lcd.clear( )

Bu komut, void setup(); veya void loop(); bölümünde kullanılabilir. LCD’de görüntülenen herhangi bir metni veya veriyi siler ve imleci ekranın sol üst köşesine (ilk satır ve ilk sütun) konumlandırır.

İsterseniz şu ana kadar öğrendiklerimizle bir yanıp sönen yazı yapalım.

#include <LiquidCrystal.h> // kütüphaneyi ekledik

LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // hangi pinlerde olduğunu belirttik

void setup() {
   lcd.begin(16, 2); // 16 sütun 2 karakter, LCD aktif
}

void loop() {
  lcd.print("projedefteri"); // ekrana projedefteri yazdık
  delay(500); // 500ms beklettik
  lcd.clear(); // ekranı temizledik
  delay(500); // 500ms beklettik
}

LCD Ekranda şekilde gözükecektir:

lcd-yanip-sonen görseli yüklenemedi. Lütfen yorumlardan bize bildirin!

lcd.home( )

Bu komut, imleci ekranın 0. satıra ve 0. sütuna yani ekranın sol üst köşesine imlecin gelmesini sağlar. Eğer lcd.print(); komutunu kullandıktan sonra lcd.home(); kullanırsak üzerine yazacaktır. Örneğin ekrana “projedefteri” yazalım ve sonra lcd.home(); komutunu kullandıktan sonra lcd.print ile ekrana “12345” yazdıralım.

#include <LiquidCrystal.h> // kütüphaneyi ekledik

LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // hangi pinlerde olduğunu belirttik

void setup() {
  lcd.begin(16, 2); // 16 sütun 2 karakter, LCD aktif
  lcd.print("projedefteri"); // ekrana projedefteri yazdık
}

void loop() {
  lcd.home(); // bu komuttan sonra yazacaklarımızı 0'a 0. konuma yazdıracak
  lcd.print("12345"); // ekrana 12345 yazdık
}

Ekranda şu şekilde gözükecektir:

lcd-12345defteri görseli yüklenemedi. Lütfen yorumlardan bize bildirin!

lcd.setCursor( )

Bu komut ekran imlecinin pozisyonunu ayarlamak için kullanılır. lcd.home(); komutuna benzer ancak lcd.home();‘dan daha kullanışlıdır. Çünkü bu komut imleci (ve herhangi bir yazılı metni vb.) ekranın istediğimiz herhangi bir yerine yerleştirir. Programın void setup(); ya da void loop(); bölümünde kullanılabilir.

lcd.setCursor();fonksiyonu parametre olarak aldığı satır ve sütun numarasını temsil eden LCD ekran hücresine imleci konumlandırır.

İmleç konumu, lcd.setCursor(sütun, satır); mantığı ile çalışır. Sütun ve satır koordinatları sıfırdan başlayarak sırasıyla 0-1 ve 0-15 (lcd.setCursor(0-1, 0-15)) Örneğin, yukarıda yaptığımız “projedefteri” programının void setup(); bölümünde lcd.setCursor(3, 1);kullanarak, “projedefteri” alt satırda ve sağa üçünçü pixel alanına imleci kaydırarak yazdıralım.

#include <LiquidCrystal.h> // kütüphaneyi ekledik

LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // hangi pinlerde olduğunu belirttik

void setup() {
  lcd.begin(16, 2); // 16 sütun 2 karakter, LCD aktif
  lcd.setCursor(3, 1); // 3 satır sağa kayacağını ve 1 sütun aşağıda olacağını belirttik
  lcd.print("projedefteri"); // ekrana projedefteri yazdık
}

void loop() {
}

LCD Ekranda şekilde gözükecektir:

lcd-sag-alt görseli yüklenemedi. Lütfen yorumlardan bize bildirin!

lcd.cursor( ) & lcd.noCurcor( )

Bu komut imleci görünür yapar. İmleç, LCD’ye yazdırdığımız sonra ki karakterlerin altına gelen yatay bir çizgidir. lcd.noCurcor() komutu imleci kapatır. lcd.Curcor() ve lcd.noCurcor() bir çok metin giriş alanında gördüğümüze benzer yanıp sönen imleci yardırmak için void loop() bölümünde kullanılabilir. Hemen bir yanıp sönen imleç yapalım.

#include <LiquidCrystal.h> // kütüphaneyi ekledik

LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // hangi pinlerde olduğunu belirttik

void setup() {
  lcd.begin(16, 2); // 16 sütun 2 karakter, LCD aktif
  lcd.print("projedefteri"); // ekrana projedefteri yazdık
}

void loop() {
  lcd.cursor(); // imleci görünür yaptık
  delay(500); // 500ms beklettik
  lcd.noCursor(); // imleci gizledik
  delay(500); // 500ms beklettik
}

LCD Ekranda şekilde gözükecektir:

lcd-imlec-ust görseli yüklenemedi. Lütfen yorumlardan bize bildirin!

display( ) & noDisplay( )

Bu komutlar ekrandaki yazının gizlenmesini ve tekrar görünmesini sağlar. clear(); fonksiyonu hafızadan silme, temizleme işlevini görüyorken, noDisplay(); ve display(); fonksiyonları ise ekrandaki yazının gizlenmesini ya da görünmesini sağlar.

#include <LiquidCrystal.h> // kütüphaneyi ekledik

LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // hangi pinlerde olduğunu belirttik

void setup() {
  lcd.begin(16, 2); // 16 sütun 2 karakter, LCD aktif
  lcd.print("projedefteri"); // ekrana projedefteri yazdık
}

void loop() {
  lcd.display(); // ekrandakilerin görünmesini açtık
  delay(500); // 500ms beklettik
  lcd.noDisplay(); // ekrandakileri gizledik
  delay(500); // 500ms beklettik
}

Ekranda şu şekilde gözükecektir:

lcd-yanip-sonen görseli yüklenemedi. Lütfen yorumlardan bize bildirin!

lcd.write( )

LCD’ye farklı tiplerde ver yazdırmak için bu komutu kullanabilirsiniz, örneğin DHT11’den gelen sıcaklık ve nem bilgilerini, bir HCSR-04 sensöründen gelen uzaklık, yakınlık bilgisini ekrana yazdırabilirsiniz. Kendimiz oluşturduğumuz özel karakterleri yazdırmak amacıylada kullanabiliriz.


lcd.createChar( )

Bu komut kendi özel karakterlerimizi oluşturmamıza yarar. 16x2 LCD’nin her bir krakterinin 5 piksel genişliği ve 8 piksel yüksekliği vardır. Tek bir programda 8 farklı özel karakter tanımlayabiliriz. Örneğin ekrana Türkçe karakter olarak “ç” harfini yazalım. Sizde kendinize özel karakter yapmak istiyorsanız buraya tıklayın.

#include <LiquidCrystal.h> // kütüphaneyi ekledik

LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // hangi pinlerde olduğunu belirttik

byte harf[8] = { // 8 bitlik bir bayt olduğunu belirttik ve bu bayt isim verdik
  B00000,
  B00000,
  B01111,
  B10000,
  B10000,
  B10000,
  B01111,
  B00100
};

void setup() {
  lcd.begin(16, 2); // 16 sütun 2 karakter, LCD aktif
  lcd.createChar(0, harf); // kendimize özel karakteri göstermesi için createChar kullandık
  lcd.write((uint8_t)0); // byte ekrana yazdırdık
}

void loop() {
}

LCD Ekranda şekilde gözükecektir:

lcd-c-harfi görseli yüklenemedi. Lütfen yorumlardan bize bildirin!

Bu komut, döngü başına yaklaşık 500 milisaniyede bir imlecin bulunduğu pixeli yakıp sönmesini sağlar. Bunu void loop() alanında kullanılır. lcd.noBlink() komutu ise pixeli söndürür. Hemen bir örnek yapalım.

#include <LiquidCrystal.h> // kütüphaneyi ekledik

LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // hangi pinlerde olduğunu belirttik

void setup() {
  lcd.begin(16, 2); // 16 sütun 2 karakter, LCD aktif
  lcd.print("Imlec ->");
  lcd.blink(); // imleci yaktık
  delay(4000); // 4 saniye beklettik
  lcd.clear();
  lcd.setCursor(0, 1); // imlec pozisyonu 2. satır 1. sütun
  lcd.noBlink(); // imlec söndürdük
  lcd.print("Imlec ->");
  delay(2000); // 2 saniye beklettik
  lcd.clear(); // ekranı temizle
}

void loop() {
}

LCD Ekranda şekilde gözükecektir:

lcd-blink görseli yüklenemedi. Lütfen yorumlardan bize bildirin!

lcd.scrollDisplayLeft( )

Bu komut, LCD’ye yazdırdığımız her şeyi alır ve sola doğru taşır. Bunu takiben bir gecikme komutu ile void loop () bölümünde kullanılmalıdır. Komut, ilk karaktere geri dönmeden önce metni 40 alan sola taşır. Bu kod, “projedefteri” metnini, karakter başına bir saniyede olmak üzere sola taşır, hemen bir örnek kod ile görelim.

#include <LiquidCrystal.h> // kütüphaneyi ekledik

LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // hangi pinlerde olduğunu belirttik

void setup() {
  lcd.begin(16, 2); // 16 sütun 2 karakter, LCD aktif
  lcd.print("projedefteri"); // ekrana projedefteri yazdık
}
void loop() {
  lcd.scrollDisplayLeft(); // sağdan sola doğru kaydırma
  delay(100); // 100ms beklettik
}

LCD Ekranda şekilde gözükecektir:

lcd-sola-kayan-yazi görseli yüklenemedi. Lütfen yorumlardan bize bildirin!

lcd.scrollDisplayRight( )

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

#include <LiquidCrystal.h> // kütüphaneyi ekledik

LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // hangi pinlerde olduğunu belirttik

void setup() {
  lcd.begin(16, 2); // 16 sütun 2 karakter, LCD aktif
  lcd.print("projedefteri"); // ekrana projedefteri yazdık
}

void loop() {
  lcd.scrollDisplayRight(); // soldan sağa doğru kaydırma
  delay(100); // 100ms beklettik
}

LCD Ekranda şekilde gözükür:

lcd-saga-kayan-yazi görseli yüklenemedi. Lütfen yorumlardan bize bildirin!

lcd.autoscroll( )

Bu komut 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> // kütüphaneyi ekledik

LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // hangi pinlerde olduğunu belirttik

void setup() {
  lcd.begin(16, 2); // 16 sütun 2 karakter, LCD aktif
}

void loop() {
  lcd.setCursor(0, 0); // satır ve sütün konumunu belirledik
  lcd.autoscroll(); // otomatik kaydırmayı açtık
  lcd.print("proje"); // ekrana proje yazdık
  delay(200); // 200ms beklettik
  lcd.setCursor(0, 1); // satır ve sütün konumunu belirledik
  lcd.print("defteri"); // ekrana defteri yazdık
  delay(400); // 400ms beklettik
}

LCD Ekranda şekilde gözükür:

lcd-autoscroll görseli yüklenemedi. Lütfen yorumlardan bize bildirin!

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 komut, metnin ekrana yazdırıldığı yönü ayarlamamıza yarar. Varsayılan mod, lcd.leftToRight () komutunu kullanarak soldan sağa doğrudur, ancak metnin ters yönde yazmak istiyorsak bu komutu kullanabilirsiniz, aşağıdaki örnekteki gibidir.

#include <LiquidCrystal.h> // kütüphaneyi ekledik

LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // hangi pinlerde olduğunu belirttik

void setup() {
  lcd.begin(16, 2); // 16 sütun 2 karakter, LCD aktif
  lcd.setCursor(12, 0);
  lcd.rightToLeft(); // sağdan sola doğru olacağını belirledik
  lcd.print("proje defteri"); // ekrana proje defteri yazdık
}

void loop() {
}

LCD Ekranda şekilde gözükür:

lcd-ters-yazi görseli yüklenemedi. Lütfen yorumlardan bize bildirin!

16x2 LCD Ekranı Çevrim içi Kullanma

Aşağıdan tıklayarak çevrim içi olarak çalıştırabilirsiniz. 😊 Eğer kendiniz düzenleyip değiştirmek istiyorsanız buraya tıklayabilirsiniz. 😉

Buraya tıklayarak kullanabilirsiniz!

Kapanış 🙌🏻

Umarım yararlı sizin için yararlı bir blog olmuştur. 🙂 Sizden bir ricam var, 😀 aşağıda bulunan “Sen ne düşünüyorsun?” bölümünden düşünceni paylaşarak ve yorum yaparak hem bana destek olabilir ve daha çok kişiye ulaşabilmesini sağlayabilir hemde görüşünüzü öğrenebilirim. 😊 En güncel, neredeyse tüm kaynaklarda araştırarak dev bir blog oluştu. Aylardır yapmaya ve yazmaya devam ettiğim bir blog oldu… Yardımcı olabildiysem ne mutlu bana! Sağlıcakla… 🥰