Arduino 16×2 LCD Ekran Kullanımı

Arduino 16×2 LCD Ekran kullanımı, bir çok projede kullanıcı arayüzü bakımında oldukça zengin bir kullanım alanına sahiptir. LCD ekran kullanarak, veri takibi, basit oyun senaryoları, güvenlik sistemleri, sensör okumaları ya da otomasyon işlemlerine entegre edebilirsiniz.

Yazının altına doğru, kütüphanenin sağladığı diğer fonksiyonları ve özel karakter yapımını görebilirsiniz.

16X2 Karakter LCD ekranların bazı modelleri üzerinde I2C devresi ile beraber gelmektedir bu sayede kalabalık kablo görüntüsü yerine 2 adet kablo ile veri aktarımı sağlanmaktadır. Daha önceki yazılarımızda I2C devresi olmayan modeller ile işlemler yaptık. Bu yazımızda hem I2C entegresi üzerinde gelen bir LCD ekranla hem de I2C devresi olmayan bir LCD ekran ile işlem yapacağız.

Önceki LCD Ekran yazılarımız


I2C Devresi Olan LCD Ekran

I2C, Inter-IC’nin kısaltmasıdır. Ve bir BUS türüdür. I2C, senkron, çoklu bağımlı, çoklu ana paket anahtarlamalı, tek uçlu bir seri veriyoludur. Aynı veriyoluna birden fazla çip bağlanabilir, Seri Veri Hattı (SDA) ve Seri Saat Hattı (SCL) kullanır. Diğer voltajlara sahip sistemlere izin verilmesine rağmen, kullanılan tipik voltajlar +5 V veya +3,3 V’dir. I2C protokolü hakkında daha fazla bilgi için buraya tıklayın.

Arduino 16x2 LCD Ekran Kullanımı arduino 16x2 lcd ekran,arduino 16x2 lcd ekran kullanımı,arduino lcd ekran,arduino lcd ekrana yazı gelmiyor,arduino i2c lcd ekran
LCD Ekrana Lehimlenmiş I2C Devresi

Gerekli Malzemeler

  • Geliştirme Kartı(Arduino UNO)
  • 16×2 Karakter LCD Ekran
  • 16×2 LCD I2C Devresi
  • Bağlantı Kabloları
  • Potansiyometre I2C üzerinde Mevcut
Arduino 16x2 LCD Ekran Kullanımı arduino 16x2 lcd ekran,arduino 16x2 lcd ekran kullanımı,arduino lcd ekran,arduino lcd ekrana yazı gelmiyor,arduino i2c lcd ekran
LCD Ekran İçin I2C Devresi

Bağlantı Şeması

Arduino 16x2 LCD Ekran Kullanımı arduino 16x2 lcd ekran,arduino 16x2 lcd ekran kullanımı,arduino lcd ekran,arduino lcd ekrana yazı gelmiyor,arduino i2c lcd ekran
Arduino UNOI2C Devreli LCD Ekran
GNDGND
5VVCC
Analog 4(SDA)SDA
Aanalog 5(SCL)SCL

I2C’nin Adresini Bulmak

Genelde bu adres, I2C devresinin arkasında yazar fakat bazen bu yazılandan farklı değerlerde olabilir, kullanılan direnç değeri bu adresi değiştirebilir bu yüzden program koduna geçmeden önce devre şemasındaki bağlantıyı yapıp, I2C adres tarama kodunu karta yükleyip çalıştırmanızı öneriyoruz.

I2C Adres Tarama Kodu

I2C Tarayıcı kodu, I2C cihazlarının sayısını ve I2C cihazlarının adresini bulmak için kullanılır. Bu kodu kartınıza yükledikten sonra seri ekranı açarak adresi öğrenebilirsiniz. Eğer bağlantılar hatalı ya da I2C devresi bozuksa I2C cihazı bulunamaz.

Adres bulunduktan sonra “proje kodu” kısmındaki gerekli adresi değiştirmelisiniz.

#include <Wire.h>
void setup()
{
  Wire.begin();
  Serial.begin(9600);
  Serial.println("\nI2C Tarayici");
}
void loop()
{
  byte error, address;
  int Devices;
  Serial.println("Taraniyor...");
  Devices = 0;
  for (address = 1; address < 127; address++ )
  {

    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0)
    {
      Serial.print("0x adresinde I2C cihazı bulundu");
      if (address < 16)
        Serial.print("0");
      Serial.print(address, HEX);
      Serial.println("  !");
      Devices++;
    }
    else if (error == 4)
    {
      Serial.print("0x adresinde bilinmeyen hata");
      if (address < 16)
        Serial.print("0");
      Serial.println(address, HEX);
    }
  }
  if (Devices == 0)
    Serial.println("I2C cihazı bulunamadı\n");
  else
    Serial.println("bitti\n");
  delay(5000);
}

Proje Kodu

Buradaki adres çoğu kart ile çalışmaktadır fakat, kontrol ederek kendi bulduğunuz adresi yazmanızı öneriyoruz.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); //0x27 kısmına kendi adresinizi yazmanır gerekir.

void setup()
{

   lcd.begin();


   lcd.backlight();
   lcd.clear();
   lcd.setCursor(4,0);
   lcd.print("devreyakan.com");
}

void loop()
{
}

I2C Devresi Olmayan LCD Ekran

Genel olarak başlangıç için oldukça yaygın kullanılan bu ekran, oldukça fazla bağlantı kablosu gerektirmektedir. Ayrıca ekranın parlaklığını ayarlamak bir potansiyometre ya da direnç ve arduino kodu üzerinden bir pine gerek çıkışı vererek ayarlanmaktadır.

Bu içeriğin bu bölümü, metin ve sayıları görüntülemenin temellerini kapsar. İkinci ksımda, özel karakterlerin nasıl görüntüleneceğini ve LiquidCrystal Arduino kütüphanesinin diğer işlevlerini nasıl kullanabileceğinizi daha ayrıntılı olarak ele alacağız.

Gerekli Malzemeler

  • Geliştirme Kartı(Arduino UNO)
  • 16×2 Karakter LCD Ekran
  • Bağlantı Kabloları
  • Potansiyometre(Opsiyonel)

Göreceğiniz gibi, bu ekranları kontrol etmek için oldukça fazla bağlantıya ihtiyacınız var. Bu nedenle onları arkaya monte edilmiş bir I2C arayüz modülü ile kullanabilirsiniz.

Bağlantı Şeması

Arduino 16x2 LCD Ekran Kullanımı arduino 16x2 lcd ekran,arduino 16x2 lcd ekran kullanımı,arduino lcd ekran,arduino lcd ekrana yazı gelmiyor,arduino i2c lcd ekran

LCD’yi 4-bit modunda kullanacağız, yani D0-D3’e herhangi bir şey bağlamanıza gerek yok. R/W pimi toprağa bağlanır, bu pim DÜŞÜK çekecek ve LCD’yi YAZMA moduna ayarlayacaktır.

Arduino UNO16X2 LCD Ekran
GNDVSS
5V VCCVDD
Boş ya da
gerekli pin
V0 Pini: 10Ω Potansiyometre (ya da geliştirme kartı
üzerinden farklı bir kablo ile güç sağlama)
2RS
GNDRW
3E
Sırayla 4-7Sırayla D4-D7
5V VCCA(Anot)
GNDK(Katot)

Ekranı test etmek için aşağıdaki yukarıda gösterildiği gibi bağlantıları yapmanız gerekecektir.

Çoğu LCD’de LED arka ışığı için yerleşik bir seri direnç bulunur. Bunu, pin 15’e (Anot) bağlı LCD’nin arkasında bulmalısınız. Ekranınızda direnç yoksa 5 V ile pin 15 arasında bir tane eklemeniz gerekecektir. 220Ω direnç kullanmak güvenli olacaktır, ancak bu değer ekranınızı biraz karartabilir. Arka ışığın maksimum akım derecesi için veri sayfasını kontrol edebilir ve bunu uygun bir direnç değeri seçmek için kullanabilirsiniz.

LCD’yi bağladıktan sonra, ekranın parlaklığını ayarlamanız gerekecektir. Bu, 10 kΩ potansiyometreyi saat yönünde veya saat yönünün tersine çevirerek yapılabilir ya da kod üzerinde dijital bir pine gerekli voltaj çıkışını ayarlayıp bu potansiyometre yerine bağlanabilir.

Proje Kodu

Basit bir şekilde ilk kullanımı böyle gerçekleştirebilirsiniz:

#include <LiquidCrystal.h>
 //(RS, E, D4, D5, D6, D7):
LiquidCrystal lcd = LiquidCrystal(2, 3, 4, 5, 6, 7);
void setup() {
  // Kullandığımız LCD 16X2 olduğu için:
  lcd.begin(16, 2);
}
void loop() {
  // İmleci üçüncü sütuna ve ilk satıra ayarlayın, sayma 0'dan başlar:
  lcd.setCursor(2, 0);
  // dizeyi yazdır 'devreyakan':
  lcd.print("devreyakan");
  // İmleci üçüncü sütuna ve ikinci satıra ayarlayın:
  lcd.setCursor(2, 1);
  // dizeyi yazdır 'LCD Ekran':
  lcd.print("LCD Ekran");
}

Kitaplığı ekledikten sonraki adım, LiquidCrystal sınıfının yeni bir örneğini oluşturmaktır. Bu, LiquidCrystal(RS E, d4, d5, d6, d7) işleviyle yapılır. Parametre olarak ekranı bağladığımız Arduino pinlerini kullanıyoruz. Ekranı ‘lcd’ olarak adlandırdığımızı unutmayın. ‘menu_display’ gibi isterseniz farklı bir isim verebilirsiniz.

LCD Ekran Kütüphanesi Fonksiyonları

LiquidCrystal Arduino kütüphanesi yararlı bulabileceğiniz birçok başka yerleşik işlev vardır. Aşağıda açıklama ve bazı kod parçacıklarıyla birlikte bunlara genel bir bakış bulabilirsiniz.

clear()

LCD ekranı temizler ve imleci ekranın sol üst köşesine (ilk satır ve ilk sütun) konumlandırır. Bir döngüde farklı sözcükleri görüntülemek için bu işlevi kullanabilirsiniz.

#include <LiquidCrystal.h>
// (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd = LiquidCrystal(2, 3, 4, 5, 6, 7);
void setup() {
  lcd.begin(16, 2);
}
void loop() {
  lcd.clear();
  lcd.print("temizle");
  delay(2000);
  lcd.clear();
  lcd.print("iknci satir");
  delay(2000);
}

home()

İmleci LCD’nin sol üst köşesine konumlandırır. Ekranı da temizlemek istiyorsanız clear() kullanın.

cursor()

LCD imlecini görüntüler: yazdırılacak sonraki karakterin konumunda bir alt çizgi (çizgi).

noCursor()

LCD imlecini gizler. Aşağıdaki örnek, “cursor()”ın sonunda yanıp sönen bir imleç oluşturur.

#include <LiquidCrystal.h>
//  (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd = LiquidCrystal(2, 3, 4, 5, 6, 7);
void setup() {
  lcd.begin(16, 2);
  lcd.print("cursor()");
}
void loop() {
  lcd.cursor();
  delay(500);
  lcd.noCursor();
  delay(500);
}

blink()

Yanıp sönen blok stili bir LCD imleç oluşturur: yazdırılacak sonraki karakterin konumunda yanıp sönen bir dikdörtgen.

noBlink()

Blok stili LCD imleci devre dışı bırakır. Aşağıdaki örnek, yanıp sönen imleci 5 saniyeliğine görüntüler ve ardından 2 saniyeliğine devre dışı bırakır.

#include <LiquidCrystal.h>
// (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd = LiquidCrystal(2, 3, 4, 5, 6, 7);
void setup() {
  lcd.begin(16, 2);
  lcd.print("blink() ornegi");
}
void loop() {
  lcd.blink();
  delay(5000);
  lcd.noBlink();
  delay(2000);
}

display()

Bu fonksiyon LCD ekranı açar ve ekrana yazdırılan herhangi bir metni veya imleçleri görüntüler.

noDisplay()

Bu işlev, LCD’ye yazdırılan tüm metinleri veya imleçleri kapatır. Metin/veriler LCD belleğinden silinmez. Bu, display() işlevi çağrıldığında yeniden gösterileceği anlamına gelir.

Aşağıdaki örnek, yanıp sönen bir metin efekti oluşturur.

#include <LiquidCrystal.h>
// (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd = LiquidCrystal(2, 3, 4, 5, 6, 7);
void setup() {
  lcd.begin(16, 2);
  lcd.print("Yanip sonen");
}
void loop() {
  lcd.display();
  delay(2000);
  lcd.noDisplay();
  delay(2000);
}

write()

Bu fonksiyon LCD’ye bir karakter yazmak için kullanılabilir. Daha fazla bilgi için aşağıdaki özel karakterlerin oluşturulması ve görüntülenmesiyle ilgili bölüme bakın.

scrollDisplayLeft()

Ekranın içeriğini (metin ve imleç) bir boşluk sola kaydırır. Bir kayan metin animasyonu oluşturmak için bu işlevi kodun döngü bölümünde delay(500) ile birlikte kullanabilirsiniz.

#include <LiquidCrystal.h>
//  (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd = LiquidCrystal(2, 3, 4, 5, 6, 7);
void setup() {
  lcd.begin(16, 2);
  lcd.print("scrollDisplayLeft() ornegi");
}
void loop() {
  lcd.scrollDisplayLeft();
  delay(500);
}

scrollDisplayRight()

Ekranın içeriğini (metin ve imleç) bir boşluk sağa kaydırır.

autoscroll()

Bu işlev, LCD’nin otomatik olarak kaydırılmasını açar. Bu, ekrana çıkan her karakterin önceki karakterleri bir boşluk öteye itmesine neden olur. Geçerli metin yönü soldan sağa ise (varsayılan), ekran sola kayar; geçerli yön sağdan sola ise, ekran sağa kayar. Bu, her yeni karakterin LCD’de aynı konuma çıktısının alınması etkisine sahiptir.

Aşağıdaki örnek, otomatik kaydırmayı sağlar ve LCD’nin (16,0) konumunda 0 ila 9 arasındaki karakterleri yazdırır.

#include <LiquidCrystal.h>
// : (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd = LiquidCrystal(2, 3, 4, 5, 6, 7);
void setup() {
  lcd.begin(16, 2);
}
void loop() {
  lcd.autoscroll();
  lcd.setCursor(16, 0);
  for (int x = 0; x < 10; x++) {
    lcd.print(x);
    delay(500);
  }
  lcd.clear();
}

noAutoscroll()

LCD’nin otomatik kaydırılmasını kapatır.

leftToRight()

Bu işlev, ekranın sola dayalı (varsayılan) gibi metnin imleçten sağa doğru akmasına neden olur.

rightToLeft()

Bu işlev, ekranın sağa hizalanmış gibi metnin imleçten sola akmasına neden olur.

LCD Ekranda Özel Karakterler Oluşturmak

createChar() işleviyle LCD’de özel karakterler oluşturmak ve görüntülemek mümkündür. Bu, özellikle standart ASCII karakter kümesinin parçası olmayan bir karakteri görüntülemek istiyorsanız kullanışlıdır.

Teknik bilgi: Hitachi HD44780 LCD kontrol cihazını temel alan LCD’ler iki tür belleğe sahiptir: CGROM ve CGRAM (Karakter Üretici ROM ve RAM). CGROM, standart 8 bitlik karakter kodlarından tüm 5 x 8 noktalı karakter desenlerini oluşturur. CGRAM, kullanıcı tanımlı karakter kalıpları üretebilir.

5 x 8 noktalı ekranlar için, CGRAM 8 adede kadar özel karakter ve 5 x 10 noktalı ekranlar için 4 adede kadar yazabilir.

Örnek Kod

Aşağıdaki örnek, sekiz özel karakter (0 – 7 numaralı) oluşturur ve görüntüler.

#include <LiquidCrystal.h>
// (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd = LiquidCrystal(2, 3, 4, 5, 6, 7);

byte kalp[] = {
  B00000,
  B01010,
  B11111,
  B11111,
  B01110,
  B00100,
  B00000,
  B00000
};
byte zil[] = {
  B00100,
  B01110,
  B01110,
  B01110,
  B11111,
  B00000,
  B00100,
  B00000
};
byte uzayli[] = {
  B11111,
  B10101,
  B11111,
  B11111,
  B01110,
  B01010,
  B11011,
  B00000
};
byte tik[] = {
  B00000,
  B00001,
  B00011,
  B10110,
  B11100,
  B01000,
  B00000,
  B00000
};
byte hoparlor[] = {
  B00001,
  B00011,
  B01111,
  B01111,
  B01111,
  B00011,
  B00001,
  B00000
};
byte ses[] = {
  B00001,
  B00011,
  B00101,
  B01001,
  B01001,
  B01011,
  B11011,
  B11000
};
byte kurukafa[] = {
  B00000,
  B01110,
  B10101,
  B11011,
  B01110,
  B01110,
  B00000,
  B00000
};
byte kilit[] = {
  B01110,
  B10001,
  B10001,
  B11111,
  B11011,
  B11011,
  B11111,
  B00000
};
void setup() {
  lcd.begin(16, 2);
  lcd.createChar(0, kalp);
  lcd.createChar(1, zil);
  lcd.createChar(2, uzayli);
  lcd.createChar(3, tik);
  lcd.createChar(4, hoparlor);
  lcd.createChar(5, ses);
  lcd.createChar(6, kurukafa);
  lcd.createChar(7, kilit);

  lcd.clear();
  lcd.print("Ozel Karakter");
}
void loop() {
  lcd.setCursor(0, 1);
  lcd.write(byte(0));
  lcd.setCursor(2, 1);
  lcd.write(byte(1));
  lcd.setCursor(4, 1);
  lcd.write(byte(2));
  lcd.setCursor(6, 1);
  lcd.write(byte(3));
  lcd.setCursor(8, 1);
  lcd.write(byte(4));
  lcd.setCursor(10, 1);
  lcd.write(byte(5));
  lcd.setCursor(12, 1);
  lcd.write(byte(6));
  lcd.setCursor(14, 1);
  lcd.write(byte(7));
}