1000 TL Üzeri Alışverişlerde Ücretsiz Kargo ve Türkiye'nin Her Yerine 59,90₺

Arduino ile Nokia 5110 LCD Ekran Kullanımı - Resim ve Yazı | Robocombo

Arduino ile Nokia 5110 LCD Ekran Kullanımı - Resim ve Yazı | Robocombo
Merhaba arkadaşlar, bu yazımızda arduino ile nokia 5110 lcd ekran kullanımı ile resim yazdırma konusunu inceleyeceğiz. Cep telefonlarının düğmelerinin olduğu iPhone öncesi günleri hatırlıyor musunuz? O dönemlerde Nokia bu küçük LCD'leri 3310 ve 5110 cep telefonlarında kullandı. Teknoloji değiştikçe, bu ekranlar sonunda DIY dünyasında yeni yerlerini buldu. Nokia 5110 ekran küçük, ucuz, kullanımı kolay olması, oldukça düşük güç tüketimi ve bitmap'lerin yanı sıra metin görüntüleyebildiğinden zamanla hobi uzmanları arasında popülerleştiler.  

Satın Alınabilir Ürünler;

 

Nokia 5110 LCD Ekran Sürücüsü - PCD8544

5110 ekran modülünün kalbinde, Philips - PCD8544 tek yongalı düşük güçlü CMOS LCD sürücü denetleyicisi bulunmaktadır. Çip, 84 × 48 piksel grafik ekran sürmek için tasarlanmıştır. SPI'ye benzer bir seri veri yolu arabirimi aracılığıyla mikrodenetleyicilere arabirim sağlar.
 
PCD8544 kontrol cihazının çok yönlülüğü, yonga üzerinde LCD kaynağı ve bias voltajları üreterek düşük güç tüketimiyle güce duyarlı uygulamalar için uygundur. Normalde, LCD yalnızca 6 ila 7mA kadar düşük tüketir. Veri sayfasına göre, bu çip 2.7 ila 3.3 V aralığında çalışır ve 3v iletişim seviyelerine sahiptir. Bu nedenle, Arduino gibi herhangi bir 5V mikrodenetleyicisi için bir tür logic seviye dönüştürücü gereklidir (aksi takdirde ekran zarar görebilir).

5110 Arka Işık

5110 lcd ekran ayrıca farklı renklerde bir arka plan ışığıyla birlikte gelir. Kırmızı, yeşil, mavi ve beyaz. Arka ışık, ekranın kenarlarında dört LED'den başka bir şey değildir. LCD'nin arka ışığını değiştirmek isterseniz, arka tarafındaki metal klipsleri iterek LCD'yi karttan çıkarın. Ekran kapandığında, ekranın kenarlarına lehimlenmiş dört LED'i göreceksiniz. LED'leri istediğiniz renkli LED'lerle değiştirin.
 
 Uyarı: Bu LCD ekranların herhangi bir akım sınırlama direnci ile birlikte gelmeyen birçok sürümü vardır. Bu, güç kaynağını bağlarken dikkatli olmanız gerektiği anlamına gelir. Önlem olarak, 'Arka Işık' pimiyle seri olarak 330Ω akım sınırlama direnci yerleştirebilirsiniz.
 

Nokia 5110 LCD Bellek Haritası

PCD8544 LCD sürücüsünde, görüntülenecek bit desenini tutan ekran için yerleşik bir 504 bayt Grafik Görüntü Veri RAM'i (GDDRAM) bulunur. Bu hafıza alanı 6 bölüm olarak (0'dan 5'e kadar) düzenlenmiştir. Her bölüm 84 sütun / segment (0'dan 83'e kadar) içerir. Ve her sütun 8 bit veri saklayabilir (0'dan 7'ye).

6 banka x 84 segment x 8 bit veri = 4032 bit = 504 bayt

 

Bankalar(GDDRAM bölümleri), segmentler ve veriler içeren tüm bellek haritası aşağıda vurgulanmıştır.

 
Her bit, ekrandaki programlı olarak AÇIK veya KAPALI hale getirilebilen belirli bir pikseli temsil eder.

Nokia 5110 Ekran Özellikleri:

Görüntü Teknolojisi Nokta Vuruşlu LCD
MCU Arayüzü SPI
Ekran boyutu 1.5 inç
çözüm 84 × 48 piksel
Çalışma gerilimi 2.7V - 3.3V
Çalışma Akımı Maks. 50mA
Görüş açısı 180 °

Nokia 5110 LCD Ekran Modülü Pinout

Bağlantı ve örnek kodlara dalmadan önce Pinout'a bir göz atalım.

 
RST pimi ekranı sıfırlar. Ayrıca bu pimi Arduino sıfırlamaya bağlayarak ekranı otomatik olarak sıfırlar. CE (Chip Enable) pimi, aynı SPI veriyolunu paylaşan birçok bağlı cihazdan birini seçmek için kullanılır. D/C (Veri / Komut) pimi, ekrana aldığı verilerin bir komut veya görüntülenebilir veri olup olmadığını gösterir. DIN SPI arayüzü için seri veri pinidir. CLK SPI arayüzü için bir seri saat pinidir. VCC pin, Arduino'daki 3.3V volt pinine bağladığımız LCD için güç sağlayan pindir. BL (Arka ışık) pimi ekranın arka ışığını kontrol eder. Parlaklığını kontrol etmek için bir potansiyometre ekleyebilir veya bu pimi PWM özellikli Arduino pinlerine bağlayabilirsiniz. GND Arduino topraklarına bağlanmalıdır.

Nokia 5110 LCD Ekran Modülünü Arduino Uno'ya Bağlama - Kablolama

Kod yüklemeye ve ekrana veri göndermeye başlamadan önce, ekranı Arduino'ya bağlayalım. Bağlantılar oldukça basittir. Yazılım SPI'sini uyguladığımız için esnek pin seçeneklerine sahibiz. Veri iletim pinlerini herhangi bir dijital I / O pinine bağlayabilirsiniz. Seri saat (CLK), seri veri (DIN), veri / komut (D/C), çip etkinleştirme (CE) ve sıfırlama (RST) pinleri, Arduino'daki pin 3'e kadar bağlanır.
 
Ancak ne yazık ki, LCD 3v ile çalışır. Bu yüzden bu pinleri Arduino'ya doğrudan bağlayamıyoruz. Biraz korumaya ihtiyacımız var. Seviyeleri değiştirerek yapılabilir. Seviyeleri kaydırmanın en ucuz ve en kolay yollarından biri, her veri iletim pimi ile birlikte dirençler eklemektir. Sadece CLK, DIN, D/C ve RST pimleri arasına 10kΩ direnç ve CE arasına 1kΩ direnç ekleyin. Son olarak, arka ışık (BL) pimi 330Ω akım sınırlama direnci ile 3.3V'a bağlanır. Parlaklığını kontrol etmek istiyorsanız, bir potansiyometre ekleyebilir veya bu pimi PWM özellikli herhangi bir Arduino pimine bağlayabilirsiniz. Aşağıdaki şemada her şeyin nasıl kablolanacağı gösterilmektedir.
Bununla birlikte, şimdi bir kod yüklemeye ve ekran baskısını almaya hazırsınız.

Nokia 5110 LCD Ekran Modülü Kullanımı için Arduino Kitaplığı Yükleme

PCD8544 LCD denetleyicide esnek ancak karmaşık sürücüler vardır. PCD8544 kontrol cihazını kullanmak için bellek adresleme konusunda geniş bilgi gereklidir. Neyse ki, Adafruit PCD8544 Nokia 5110 LCD kütüphanesi, tüm karmaşıklıkları gizlemek için yazılmıştır, böylece ekranı kontrol etmek için basit komutlar verebiliriz. Kitaplığı yüklemek için Taslak> Kitaplığı Dahil Et> Kitaplıkları Yönet… 'e gidin. Kitaplık Yöneticisi'nin kitaplıklar dizinini indirmesini ve yüklü kitaplıklar listesini güncellemesini bekleyin.

 
'Nokia' yazarak aramanızı filtreleyin. Birkaç sonuç çıkacaktır. Adafruit PCD8544 Nokia 5110 LCD kütüphanesini bulun. Bu girişi tıklayın ve ardından Yükle'yi seçin.

Bu kitaplık, alt düzey işlevleri işleyen donanıma özgü bir kitaplıktır. Noktalar, çizgiler, daireler, dikdörtgenler gibi grafikleri görüntülemek için Adafruit GFX Kütüphanesi ile eşleştirilmesi gerekir.

 
PCD8544, ekran için yerleşik bir GDDRAM'a sahip olmasına rağmen, içeriğini okuyamıyoruz. Matematiksel işlemleri gerçekleştirmek için ekran arabelleğini değiştirmek mümkün değildir. Alternatif olarak, kütüphane ATmega328P'den tampon olarak 504 bayt bellek ayırır. Böylece, ekran arabelleğini değiştirebilir ve daha sonra ATmega328P'nin belleğinden PCD8544 denetleyicisinin dahili belleğine toplu bir aktarım gerçekleştirebiliriz.

Arduino Kodu - Metin Görüntüleme

Şimdi ilginç şeyler geliyor! Aşağıdaki test kodu ile 'Merhaba Dünya!' mesajı görüntülenir. Ayrıca kod, şunları da içerir;
  • Ters çevrilmiş metni görüntüleme
  • Numaraları Görüntüleme
  • Bazlı Numaraları Görüntüleme (Ondalık Sayılar)
  • ASCII sembollerini görüntüleme
  • Metin Döndürme
Bu bilgiler Nokia 5110 LCD ekranın nasıl kullanılacağı hakkında tam bir anlayış sağlayacaktır ve daha pratik deneyler ve projeler için temel oluşturabilir. Kodu deneyin ve aşağıda ayrıntılı olarak parçalara ayıracağız.
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// Declare LCD object for software SPI
// Adafruit_PCD8544(CLK,DIN,D/C,CE,RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

int rotatetext = 1;

void setup()   {
  Serial.begin(9600);

  //Initialize Display
  display.begin();

  // you can change the contrast around to adapt the display for the best viewing!
  display.setContrast(57);

  // Clear the buffer.
  display.clearDisplay();

  // Display Text
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.println("Hello world!");
  display.display();
  delay(2000);
  display.clearDisplay();


  // Display Inverted Text
  display.setTextColor(WHITE, BLACK); // 'inverted' text
  display.setCursor(0,0);
  display.println("Hello world!");
  display.display();
  delay(2000);
  display.clearDisplay();

  // Scaling Font Size
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.setTextSize(2);
  display.println("Hello!");
  display.display();
  delay(2000);
  display.clearDisplay();

  // Display Numbers
  display.setTextSize(1);
  display.setCursor(0,0);
  display.println(123456789);
  display.display();
  delay(2000);
  display.clearDisplay();

  // Specifying Base For Numbers
  display.setCursor(0,0);
  display.print("0x"); display.print(0xFF, HEX); 
  display.print("(HEX) = ");
  display.print(0xFF, DEC);
  display.println("(DEC)"); 
  display.display();
  delay(2000);
  display.clearDisplay();

  // Display ASCII Characters
  display.setCursor(0,0);
  display.setTextSize(2);
  display.write(3);
  display.display();
  delay(2000);
  display.clearDisplay();

  // Text Rotation
  while(1)
  {
  display.clearDisplay();
  display.setRotation(rotatetext);  // rotate 90 degrees counter clockwise, can also use values of 2 and 3 to go further.
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.println("Text Rotation");
  display.display();
  delay(1000);
  display.clearDisplay();
  rotatetext++;
  }
}

void loop() {}

Kod, üç kütüphane vizini ekleyerek başlar. SPI.h, Adafruit_GFX.h ve Adafruit_PCD8544.h. Ardından, bir LCD nesnesi oluşturmamız gerekiyor. Bu nesne 5 parametre alır ve LCD'nin CLK, DIN, D/CCE ve RST  pinine hangi Arduino pinlerinin bağlandığını belirtir. rotatetext ile anlamlı olacak değişkenleri de tanımladık.
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// Initialize LCD object for software SPI
// Adafruit_PCD8544(CLK,DIN,D/C,CE,RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

int rotatetext = 1;

Kurulum işlevinde: LCD nesnesini begin() işlevini kullanarak başlatmamız gerekir. Ayrıca setContrast(value) 0-100 arasında herhangi bir yerde olabilen değer ile fonksiyon kullanarak ekranın kontrastını ayarlamamız gerekir. Bununla birlikte, 50-60 arasındaki değer harika sonuçlar verir. Ardından, ilk mesajımızı ekrana yazdırmadan önce arabelleği temizleriz.
//Initialize Display
display.begin();

// you can change the contrast around to adapt the display for the best viewing!
display.setContrast(57);

// Clear the buffer.
display.clearDisplay();

Basit Metin Görüntüleme (Merhaba Dünya)

// Display Text
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(0,0);
display.println("Hello world!");
display.display();
delay(2000);
display.clearDisplay();

Ekranda metin görüntülemek için yazı tipi boyutunu ayarlamamız gerekir. Bu, setTextSize() yazı tipi boyutunu (1'den başlayarak) parametre olarak çağırarak ve geçirerek yapılabilir. Ardından, setTextColor() işlevini çağırarak yazı tipi rengini ayarlamamız gerekir. Koyu arka plan için BLACK parametresini ve parlak arka plan için WHITE yazın. Şimdi mesajı yazdırmadan önce işlevi çağırarak imleç konumunu ayarlamamız gerekiyor, bu da setCursor(X,Y) ile olur. Ekrandaki pikseller yatay (X) ve dikey (Y) koordinatlarıyla adreslenir. Koordinat sistemi başlangıç ​​noktasını (0,0) sol üst köşeye yerleştirir, pozitif X sağa ve pozitif Y aşağı doğru artar. Seri monitörde veri yazdırdığımız gibi mesajı ekrana yazdırmak için basit print(" ") veya println(" ") işlev kullanabiliriz . Unutmayın, println()imleci yeni satıra götürür. Kütüphanenin ekran arabelleğinde (saniyede 100 kareden fazla) son derece hızlı matematiksel işlemler yapabilmesi için, yazdırma işlevlerine yapılan çağrılar ekran arabelleğinin içeriğini hemen PCD8544 denetleyicisine aktarmaz. Kütüphaneye, ATmega328P'deki ekran arabelleğinden PCD8544 denetleyicisinin dahili belleğine toplu aktarım gerçekleştirmesi talimatını vermek için bir komut gereklidir, bu da display() işlevidir. Bellek aktarılır aktarılmaz, LCD ekranda ekran arabelleğine karşılık gelen pikseller görünecektir.

Ters Çevrilmiş Metni Görüntüleme

// Display Inverted Text
display.setTextColor(WHITE, BLACK);
display.setCursor(0,0);
display.println("Hello world!");
display.display();
delay(2000);
display.clearDisplay();

Ters çevrilmiş metni görüntülemek için setTextColor(FontColor,BackgroundColor) işlevini çeğıracağız. Dikkat ettiyseniz, bu işlevde daha önce yalnızca bir parametre geçtiğimizi görebilirsiniz. Ancak şimdi iki parametre geçiriyoruz. Bu, Function overloading adı verilen bir şey nedeniyle yapılmaktadır. İşlev aşırı yüklenmesi olarak bilinen bu olay, aynı isimde ancak farklı parametre kümesiyle birden çok işlev oluşturma yeteneğidir. Aşırı yüklenmiş bir işleve yapılan çağrılar, geçirilen parametrelere bağlı olarak bu işlevin belirli bir uygulamasını çalıştırır. Bizde geçen setTextColor(BLACK, WHITE) kodu, dolu arka plan üzerinde siyah metin oluşturacaktır.

Yazı Tipi Boyutunu Ölçeklendirme

// Scaling Font Size
display.setTextColor(BLACK);
display.setCursor(0,0);
display.setTextSize(2);
display.println("Hello!");
display.display();
delay(2000);
display.clearDisplay();

Bu öğreticinin başlarında, setTextSize() yazı tipi boyutunu ayarlamak için işlevini çağırdık ve parametre olarak 1'i geçtik. Negatif olmayan bir tam sayı ileterek yazı tipini ölçeklendirmek için bu işlevi kullanabilirsiniz. Karakterler 5:7 oranında oluşturulur. Yani, yazı tipi boyutu 1 olursa, metni karakter başına 5 × 7 piksel oluşturacak; 2 geçmesi, metni karakter başına 10×14 pikselde görüntüler.
 
 Not: Adafruit_GFX kütüphanesi yazı tipini oluşturmaktan sorumludur. Varsayılan olarak tek aralıklı yazı tipi seçilidir. Ancak, Adafruit GFX kütüphanesinin daha yeni sürümleri alternatif yazı tiplerini kullanma olanağı sunar. Kütüphaneyle birlikte birkaç alternatif yazı tipi gelir, ayrıca yenilerini ekleme yeteneği vardır.
 

Rakamları Görüntüleme

// Display Numbers
display.setTextSize(1);
display.setCursor(0,0);
display.println(123456789);
display.display();
delay(2000);
display.clearDisplay();

Numaralar LCD ekranda sadece çağrı print() veya println()işlevi ile görüntülenebilir. Bu işlevlerin aşırı yüklenmiş bir uygulaması 32 bit işaretsiz int'i kabul eder, bu nedenle yalnızca 0 ile 4,294,967,295 arasındaki sayıları görüntüleyebilirsiniz. Bu kadar rakam da gayet işinizi görecektir :)

Sayılar için Taban Belirtme

// Specifying Base For Numbers
display.setCursor(0,0);
display.print("0x"); display.print(0xFF, HEX); 
display.print("(HEX) = ");
display.print(0xFF, DEC);
display.println("(DEC)"); 
display.display();
delay(2000);
display.clearDisplay();

print() ve println() işlevlerinde, kullanılacak tabanı (format) belirten isteğe bağlı ikinci parametre bulunur; izin verilen değerler BIN (ikili veya taban 2), OCT (sekizli veya taban 8), DEC (ondalık veya taban 10), HEX (onaltılık veya taban 16) 'dır. Kayan nokta sayıları için, bu parametre kullanılacak ondalık basamak sayısını belirtir. Örneğin:
  • print (78, BIN) “1001110” verir
  • print (78, OCT) “116” verir
  • print (78, DEC) “78” verir
  • print (78, HEX) “4E” verir
  • println (1.23456, 0) “1” verir
  • println (1.23456, 2) “1.23” verir
  • println (1.23456, 4) “1.2346” verir

ASCII Sembollerini Görüntüleme

// Display ASCII Characters
display.setCursor(0,0);
display.setTextSize(2);
display.write(3);
display.display();
delay(2000);
display.clearDisplay();

print() ve println() işlevleri ekrana insan tarafından okunabilen ASCII metni olarak veri gönderirken, write () işlevi ekrana ikili veri gönderir. Bu nedenle, ASCII sembollerini görüntülemek için bu işlevi kullanabilirsiniz. Örneğimizde, 3 numaralı gönderen kalp simgesi görüntülenecektir.

Metin(Yazı) Döndürme

// Text Rotation
while(1)
{
  display.clearDisplay();
  display.setRotation(rotatetext);
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.println("Text Rotation");
  display.display();
  delay(1000);
  display.clearDisplay();
  rotatetext++;
}

setRotation() Fonksiyonunu çağırarak ekrandaki görüntüyü döndürebilirsiniz. Ekranınızı portre modunda görüntülemenizi veya baş aşağı çevirmenizi sağlar. Fonksiyon 4 kardinal rotasyona karşılık gelen sadece bir parametreyi kabul eder. Bu değer 0'dan başlayarak negatif olmayan bir tamsayı olabilir. Değeri her artırdığınızda, ekranın içeriği saat yönünün tersine 90 derece döndürülür. Örneğin:
  • 0 - Ekranı standart yatay yönde tutar.
  • 1 - Ekranı 90 ° sağa döndürür.
  • 2 - Ekranı ters çevirir.
  • 3 - Ekranı 90 ° sola döndürür.

Nokia 5110 Ekran Arduino Kodu - Temel Çizimler

Bu örnekte, bazı temel çizimleri deneyeceğiz. Bu çizim, dikdörtgenler, yuvarlak dikdörtgenler, daireler ve üçgenler dahil olmak üzere birçok çizim işlevini gösterir. Önce deneyin ve sonra biraz ayrıntılı olarak parçalara ayıracağız.
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// Declare LCD object for software SPI
// Adafruit_PCD8544(CLK,DIN,D/C,CE,RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

void setup()   {
  Serial.begin(9600);

  //Initialize Display
  display.begin();

  // you can change the contrast around to adapt the display for the best viewing!
  display.setContrast(57);

  // Clear the buffer.
  display.clearDisplay();

  // Draw Rectangle
  display.drawRect(0, 0, 60, 40, BLACK);
  display.display();
  delay(2000);
  display.clearDisplay();


  //Draw Filled Rectangle
  display.fillRect(0, 0, 60, 40, BLACK);
  display.display();
  delay(2000);
  display.clearDisplay();


  //Draw Round Rectangle
  display.drawRoundRect(0, 0, 60, 40, 8, BLACK);
  display.display();
  delay(2000);
  display.clearDisplay();


  //Draw Filled Round Rectangle
  display.fillRoundRect(0, 0, 60, 40, 8, BLACK);
  display.display();
  delay(2000);
  display.clearDisplay();


  //Draw Circle
  display.drawCircle(20, 20, 20, BLACK);
  display.display();
  delay(2000);
  display.clearDisplay();

  //Draw Filled Circle
  display.fillCircle(20, 20, 20, BLACK);
  display.display();
  delay(2000);
  display.clearDisplay();


  //Draw Triangle
  display.drawTriangle(20, 0, 0, 40, 40, 40, BLACK);
  display.display();
  delay(2000);
  display.clearDisplay();


  //Draw Filled Triangle
  display.fillTriangle(20, 0, 0, 40, 40, 40, BLACK);
  display.display();
  delay(2000);
  display.clearDisplay();
}

void loop() {}

Temel çizimleri çizmek için aşağıdaki kod snippet'leri dışında, kodun çoğu (Kütüphaneler dahil ve ekranı başlatma) yukarıdaki kod örneğiyle aynıdır.

Dikdörtgen Çizimi

// Draw Rectangle
display.drawRect(0, 0, 60, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();


//Draw Filled Rectangle
display.fillRect(0, 0, 60, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();

drawRect() fonksiyonu kullanarak ekranda dikdörtgen çizebilirsiniz. Fonksiyon beş parametre viz alır. X koordinatı, Y koordinatı, Genişlik, Yükseklik ve renk. Aslında bu işlev, 1 piksel kenarlığı olan içi boş dikdörtgen çizer. fillRect() fonksiyonu kullanarak doldurulmuş dikdörtgen çizebilirsiniz.

Yuvarlak Kenarlı Dikdörtgen Çizim

//Draw Round Rectangle
display.drawRoundRect(0, 0, 60, 40, 8, BLACK);
display.display();
delay(2000);
display.clearDisplay();


//Draw Filled Round Rectangle
display.fillRoundRect(0, 0, 60, 40, 8, BLACK);
display.display();
delay(2000);
display.clearDisplay();

drawRoundRect() fonksiyonunu kullanarak ekranda yuvarlak dikdörtgen çizebilirsiniz. Bu fonksiyon, drawRect()bir ek parametre dışında köşe ile aynı parametreleri alır (Köşe yuvarlama yarıçapı). Aslında bu işlev, 1 piksel kenarlığı olan içi boş yuvarlak dikdörtgen çizer. fillRoundRect() fonksiyonunu kullanarak da dolu yuvarlak dikdörtgen çizebilirsiniz.

Çember, Daire, Yuvarlak

//Draw Circle
display.drawCircle(20, 20, 20, BLACK);
display.display();
delay(2000);
display.clearDisplay();

//Draw Filled Circle
display.fillCircle(20, 20, 20, BLACK);
display.display();
delay(2000);
display.clearDisplay();

drawCircle() fonksiyonu kullanarak ekranda daire çizebilirsiniz. Fonksiyon dört parametre viz alır. Merkezin X koordinatı, merkezin Y koordinatı, yarıçap ve renk. Bu işlev, 1 piksel kenarlığı olan içi boş daire çizer. fillCircle() fonksiyonu kullanarak dolu daire çizebilirsiniz.

Üçgen Çizimi

//Draw Triangle
display.drawTriangle(20, 0, 0, 40, 40, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();


//Draw Filled Triangle
display.fillTriangle(20, 0, 0, 40, 40, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();

drawTriangle() fonksiyonunu kullanarak ekranda üçgen çizebilirsiniz. Fonksiyon yedi parametre viz alır. Üçgen ve renk köşelerinin 3 X ve Y koordinatı (x0, y0, x1, y1, x2 ve y2). (X0, y0) üst tepe noktasını, (x1, y1) sol tepe noktasını ve (x2, y2) sağ tepe noktasını temsil eder. Bu işlev, 1 piksel kenarlığı olan içi boş üçgen çizer. fillTriangle() fonksiyonu kullanarak dolu üçgen çizebilirsiniz.

Arduino Kodu - Bitmap'i Görüntüleme

Bu son örnek, Nokia 5110 LCD Ekrana bitmap görüntülerin nasıl çizileceğini gösterir. Bu, şirket logolarının açılış ekranlarını oluşturmak, sprite yapmak veya sadece bilgileri görüntülemek için eğlenceli grafikler oluşturmak için kullanışlıdır. Aşağıdaki kodu kopyalayın, Arduino IDE'ye yapıştırın ve yükle'yi tıklayın.
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// Declare LCD object for software SPI
// Adafruit_PCD8544(CLK,DIN,D/C,CE,RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

// 'Marilyn Monroe 84x48', 84x48px
const unsigned char MarilynMonroe [] PROGMEM = {
  0x00, 0x00, 0x00, 0x7f, 0x00, 0x02, 0xfe, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x00, 
  0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x1f, 0xe1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 
  0x00, 0x00, 0x0f, 0xf1, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xd8, 0xe0, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x07, 0xe0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x03, 
  0x3f, 0xe0, 0x00, 0x07, 0xf0, 0x78, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x70, 0x00, 0x0f, 0xee, 
  0x7c, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x0f, 0xf7, 0x1c, 0x00, 0x00, 0x00, 0x00, 
  0x07, 0x80, 0x00, 0x0f, 0xc7, 0xf3, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x0f, 0xf3, 
  0xdf, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x08, 0x7d, 0xef, 0xff, 0xc0, 0x00, 0x00, 
  0x00, 0x7f, 0xff, 0x80, 0x30, 0x0f, 0xfc, 0xe0, 0xc0, 0x00, 0x00, 0x01, 0x9e, 0x73, 0xc0, 0xe0, 
  0x07, 0xf8, 0xc1, 0xc0, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x01, 0xc0, 0x0f, 0xfd, 0xe1, 0x80, 0x00, 
  0x00, 0x03, 0xf8, 0x00, 0x01, 0x9c, 0x0f, 0xff, 0xc1, 0xc0, 0x00, 0x00, 0x02, 0xc0, 0x00, 0x01, 
  0x9f, 0xbf, 0xfe, 0x01, 0x40, 0x00, 0x00, 0x02, 0x60, 0x00, 0x03, 0x07, 0xef, 0xff, 0x01, 0x40, 
  0x00, 0x00, 0x00, 0x60, 0x00, 0x07, 0x01, 0xf7, 0xff, 0x80, 0xc0, 0x00, 0x00, 0x00, 0x50, 0x01, 
  0xdf, 0x00, 0x7f, 0xff, 0x1c, 0x80, 0x00, 0x00, 0x00, 0x40, 0x01, 0xff, 0x00, 0x1f, 0xff, 0x1e, 
  0xe0, 0x00, 0x00, 0x02, 0x08, 0x00, 0x3f, 0x80, 0x07, 0xef, 0x03, 0xe0, 0x00, 0x00, 0x06, 0x08, 
  0x00, 0x03, 0xc0, 0x07, 0xdf, 0x07, 0xc0, 0x00, 0x00, 0x06, 0x08, 0x0f, 0x81, 0x80, 0x1f, 0xdf, 
  0x1f, 0x80, 0x00, 0x00, 0x03, 0x08, 0x1f, 0x98, 0x00, 0x3f, 0xfe, 0x19, 0x80, 0x00, 0x00, 0x18, 
  0x08, 0x3f, 0xfe, 0x00, 0x7f, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x08, 0x08, 0x30, 0x3f, 0x00, 0xff, 
  0xff, 0x3f, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x76, 0x0f, 0x89, 0xff, 0xff, 0x9f, 0x00, 0x00, 0x00, 
  0x03, 0xe0, 0x7f, 0xc3, 0x81, 0xff, 0xfe, 0x9f, 0x80, 0x00, 0x00, 0x03, 0xf0, 0x7f, 0xf3, 0xc3, 
  0xff, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x7f, 0xfd, 0xc3, 0xff, 0xfe, 0x5e, 0x00, 0x00, 
  0x00, 0x03, 0xf0, 0x7f, 0xff, 0xc3, 0xff, 0xf3, 0x1e, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x71, 0xff, 
  0x87, 0xff, 0xe3, 0xff, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x7c, 0x3f, 0x87, 0xff, 0xe3, 0xfe, 0x00, 
  0x00, 0x00, 0x0f, 0xf0, 0x3c, 0xff, 0x05, 0xff, 0xf3, 0xfc, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 
  0xfe, 0x09, 0xff, 0xf7, 0xfc, 0x00, 0x00, 0x00, 0x08, 0xf8, 0x01, 0xfc, 0x19, 0xff, 0xff, 0xf8, 
  0x00, 0x00, 0x00, 0x0c, 0x78, 0x00, 0x00, 0x13, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x0e, 0x78, 
  0x00, 0x00, 0x23, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x0e, 0xf8, 0x00, 0x00, 0x47, 0xff, 0xff, 
  0xf0, 0x00, 0x00, 0x00, 0x0c, 0xfa, 0x00, 0x01, 0x8f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x08, 
  0x7b, 0x00, 0x03, 0x3f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x0c, 0x3b, 0xf8, 0x0f, 0xff, 0xff, 
  0xff, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 
  0x07, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x71, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x41, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00
};

void setup()   {
  Serial.begin(9600);

  //Initialize Display
  display.begin();

  // you can change the contrast around to adapt the display for the best viewing!
  display.setContrast(57);

  // Clear the buffer.
  display.clearDisplay();

  // Display bitmap
  display.drawBitmap(0, 0,  MarilynMonroe, 84, 48, BLACK);
  display.display();

  // Invert Display
  //display.invertDisplay(1);
}

void loop() {}

Böyle görünür.
Nokia 5110 LCD ekranında bitmap görüntüsünü göstermek için drawBitmap() işlevi çağırmamız gerekir. Altı parametre viz alır. Sol üst köşe X koordinatı, sol üst köşe Y koordinatı, tek renkli bitmapin bayt dizisi, piksel cinsinden bitmap genişliği, piksel cinsinden bitmap yüksekliği ve Renk. Örneğimizde, bitmap görüntüsü 84×48 boyutundadır. Böylece, genişlik ve yükseklik 84 ve 48 olarak ayarlanırken X ve Y koordinatları 0 olarak ayarlanır.
// Display bitmap
display.drawBitmap(0, 0,  MarilynMonroe, 84, 48, BLACK);
display.display();


Ancak, drawBitmap() işlevi çağırmadan önce, çizmek için bir görüntüye ihtiyacımız var. Unutmayın, Nokia 5110 LCD ekranın ekran çözünürlüğü 84 × 48 pikseldir, bu nedenle bundan daha büyük görüntüler düzgün görüntülenmez. Doğru boyutta bir görüntü elde etmek için tuval boyutunu 84 × 48 piksel olarak ayarlayarak Inkscape, Photoshop, Paint, vb. Gibi favori çizim programlarını kullanabilirsiniz. Gülen Marilyn Monroe görüntüsünü örnek olarak aldık ve Paint kullanarak 84 × 48 piksele dönüştürdük ve .bmp olarak kaydettik.
Bir bitmap'e sahip olduğunuzda, PCD8544 denetleyicisinin anlayabileceği bir diziye dönüştürme zamanı gelmiştir. Bu iki yolla yapılabilir: image2cpp kullanan çevrimiçi yöntem ve LCD Assistant kullanan Çevrimdışı yöntem.

Çevrimiçi Bitmap Dizisi Oluşturucu - image2cpp

Resminizi bir diziye dönüştürebilen image2cpp - http://javl.github.io/image2cpp/ adlı çevrimiçi bir uygulama var. Image2cpp, LCD Asistan'dan daha yeni ve çok daha güçlüdür. Şunları Sağlar:
  • Aynı anda birden fazla görüntüyü dönüştürme.
  • Görüntü dosyanızı ölçeklendirme - Sığdırmak için Sığdır / Ölçeklendir / Orijinal
  • Parlaklık eşiğini siyah ve beyaz arasında ayarlama.
  • Görüntüyü dikey ve / veya yatay olarak yeniden ortalama.
  • Ters görüntü renkleri
  Başlamak için tarayıcınızda image2cpp'yi açın ve ekranda görüntülemek istediğiniz herhangi bir resmi seçin.
Görüntünüzün boyutları, Görüntü ayarları altındaki Tuval boyutu seçeneğinde bulunur. 84 × 48'den daha büyük bir görüntü seçtiyseniz, görüntüyü 84 × 48 olarak değiştirin ve uygun Ölçeklendirme seçeneğini belirleyin. Çıktıyı Önizleme bölümünde görebilirsiniz. Gerekirse Arka plan rengini veya Tersine görüntü renklerini değiştirebilirsiniz.
 
Son olarak, en önemli seçeneği değiştirin (Parlaklık Eşiği). Eşiğin ayarlanması bu seviyenin üstündeki pikselleri beyaz ve siyahın altındaki pikselleri yapar. Biz güzel detayları almak için 171'e ayarladık.
Bu küçük önizleme, ayarlarınızda yaptığınız değişiklikleri yansıtır. Ayarları göz önünde tutarak değiştirebilirsiniz.
Sonuçtan memnun kaldığınızda, veri dizisini oluşturmaya devam edebilirsiniz. Arduino Kodu olarak Kod çıkış formatını seçin ve Kod oluştur düğmesine tıklayın. Yalnızca bilgileriniz için Çizim modu adı verilen bir seçenek vardır. Aslında ekranın tarama desenine göre görüntü oluşturur. Resminiz ekranınızda karışık görünüyorsa modu değiştirmeyi deneyin.
 
Bu kadar. Bitmap'inizin bayt dizisi oluşturulur. Çıktıyı doğrudan örnek kodumuzla kullanabilirsiniz. Sadece uygun şekilde adlandırdığınızdan emin olun. Ardından diziyi drawBitmap() işlevi içinde çağırın.
 

Çevrimdışı Bitmap Dizisi Oluşturucu - Paint

Bit eşlem görüntünüzü veri dizisine dönüştürebilen paint benzeri BitMap Converter kullanabilirsiniz. İmage2cpp kadar güçlü değil ama yine de popülerdir. Başlamak için, görüntüyü 84 × 48 1 bit tek renkli bitmap'e dönüştürmeniz gerekir. Dosyanızı açın ve 84 × 48 olarak yeniden boyutlandırın.
 
Şimdi dosyanızı bitmap olarak kaydedin. Dosyayı kaydederken Farklı kaydet tipi'ni seçin: Monochrome Bitmap (*. Bmp; *. Dib). Bu, her piksel için yalnızca iki olası değere sahip 1 bit / ikili bitmap görüntü oluşturur, yani 0 (siyah) veya 1 (beyaz).
 
Buradaki tek dezavantaj, parlaklık eşik seviyesini ayarlayamamanızdır. Varsayılan olarak % 50 olarak ayarlanmıştır ve değiştirilemez. LCD asistan programını indirin. Yürütülebilir dosyayı açın ve Dosya menüsünden bitmap'inizi yükleyin.
 
Bu araçla yapabileceğiniz çok şey yok. Bu nedenle, Dosya menüsüne gidin ve Çıktıyı kaydet seçeneğini tıklayın. Dosyayı metin dosyası olarak kaydedin. Sadece bilgi için Bayt Yönlendirme adlı bir seçenek var. Aslında ekranın tarama desenine göre görüntü oluşturur. Resminiz ekranınızda karışık görünüyorsa modu değiştirmeyi deneyin.
 
Dizin oluşturulduğunda, kodunuza yapıştırın. Sadece uygun şekilde adlandırdığınızdan emin olun. Ardından diziyi drawBitmap() işlevi içinde çağırın.   
Etiketler: Arduino ile Nokia 5110 LCD Ekran Kullanımı - Resim ve Yazı
Kasım 16, 2021
Listeye dön
cultureSettings.RegionId: 0 cultureSettings.LanguageCode: TR
Çerez Uyarısı

Alışveriş deneyiminizi iyileştirmek için yasal düzenlemelere uygun çerezler (cookies) kullanıyoruz. Detaylı bilgiye Gizlilik ve Çerez Politikası
sayfamızdan erişebilirsiniz.