Home Arduino Arduino 5110 Ekran kullanımı

Arduino 5110 Ekran kullanımı

by onurnp

Arduino 5110 Ekranları ve mikrodenetleyiciler

Cep telefonlarının düğmeleri olduğu ve o küçük siyah beyaz ekrana yalnızca temizlemeniz gerektiğinde dokunduğunuz iPhone öncesi günleri hatırlıyor musunuz? Nokia bu küçük LCD’leri 3310 ve 5110 cep telefonlarında kullandı.

Teknoloji değiştikçe, bu ekranlar nihayet Mikrodenetleyici dünyasında yeni yerlerini buldu. Kısa süre sonra, bu ekranlar küçük (yalnızca yaklaşık 1,5 inç), ucuz, kullanımı kolay, oldukça düşük güçte tüketen ve bitmap’lerin yanı sıra metinleri de görüntüleyebildikleri için hobiciler arasında popüler oldular.

PCD8544 LCD Sürücüsü

Bu Modülün merkezinde, Philips – PCD8544’ün hızlı, tek yongalı, düşük güçlü CMOS LCD sürücü denetleyicisi bulunmaktadır .

Çip, 84 × 48 piksellik bir grafik ekranı sürdürecek şekilde tasarlanmıştır . SPI’a benzer bir seri veri yolu arabirimi aracılığıyla mikro denetleyicilere arabirim sağlar.

PCD8544 denetleyicinin çok yönlülüğü sayesinde, düşük güç tüketimiyle yonga üzerinde LCD besleme ve bu ekranları sürme işlemini gerçekleştirir. Normal bir durumda, LCD yalnızca 6 ila 7mA kadar düşük tüketir.

Datasheet’e 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 mantık mikrodenetleyici için, bir çeşit mantık seviyesi dönüşümü gerekir (aksi takdirde ekran zarar görebilir).

LCD Arka Işık

LCD ayrıca farklı renklerde bir arka ışıkla birlikte gelir. Kırmızı, Yeşil, Mavi & Beyaz. Arka ışık, ekranın kenarlarına yerleştirilmiş dört LED’den başka bir şey değildir.

LCD’nin arka ışığını değiştirmek isterseniz, arka taraftaki metal klipsleri iterek LCD’yi karttan çıkarın. Ekran kapandığında, ekranın kenarlarına lehimlenen dört LED’i fark edeceksiniz. LED’leri istediğiniz renkli LED’lerle değiştirmeniz mümkündür.

Bu LCD ekranların herhangi bir akım sınırlayıcı dirençle 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’ pini ile seri olarak 330Ω akım sınırlayıcı direnç yerleştirebilirsiniz.

Nokia 5110 LCD Hafıza Haritası

PCD8544 LCD sürücüsünde, görüntülenecek bit modelini tutan ekran için yerleşik 504 bayt Grafik Görüntüleme Veri RAM’i (GDDRAM) bulunur. Bu hafıza alanı 6 sıra halinde düzenlenmiştir (0’dan 5’e). Her banka 84 sütun / segment içerir (0’dan 83’e kadar). Ve her sütun 8 bitlik veri depolayabilir (0’dan 7’ye kadar). 

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

Banklar, segmentler ve veriler içeren tüm hafıza haritası aşağıda vurgulanmıştır.

Arduino 5110 Ekran pixel Bank sıralaması
Arduino 5110 Ekran pixel Bank sıralaması

Her bit, ekrandaki programla AÇIK veya KAPALI konuma getirilebilen belirli pikseli temsil eder.

İşte tam teknik özellikler:

Görüntü TeknolojisiDot Matrix LCD
MCU ArayüzüSPI
Ekran boyutu1.5 İnç Boyunca
çözüm84 × 48 piksel
Çalışma gerilimi2,7V – 3,3V
Çalışma Akımı50mA maks.
Görüş açısı180 °
5110 Özelllikleri

Nokia 5110 LCD Ekran Modülü Pin Çıkışı

Bağlantıya ve örnek koda dalmadan önce, ilk olarak Pinout’una bir göz atalım.

Arduino 5110 Pinout
Arduino 5110 Pinout

RST : Reset Pini 0 a çekilince ekranı resetler.

CE (Çip Etkinleştirme) : Pin, aynı SPI veri yolunu paylaşan birçok bağlı cihazdan birini seçmek için kullanılır. 

D / C (Veri / Komut) :  Pin ekrana, aldığı verinin bir komut mu yoksa görüntülenebilir veri mi olduğunu söyler.

DIN :  SPI arayüzü için bir seri veri pinidir.

CLK : SPI arayüzü için bir saat pinidir.

VCC : Pin, Arduino üzerindeki 3.3V volt pinine bağladığımız LCD için güç sağlar.

BL : Pin, ekranın arka ışığını kontrol eder. Parlaklığını kontrol etmek için bir potansiyometre ekleyebilir veya bu pini herhangi bir PWM özellikli Arduino pinine bağlayabilirsiniz.

GND : Arduino’nun GND Pin bağlanmalıdır.

Nokia 5110 LCD ekran modülünün Arduino Uno’ya bağlanması

Kodu yüklemeye ve ekrana veri göndermeye başlamadan önce ekranı Arduino’ya bağlayalım.

Bağlantılar oldukça basit. SPI yazılımı uyguladığımız için esnek pin seçeneklerimiz bulunmaktadır. Veri aktarım pinlerini herhangi bir dijital I / O pinine bağlayabilirsiniz. Bizim durumumuzda saat (CLK), veri (DIN), veri / komut (DC), yonga etkinleştirme (CE) ve sıfırlama (RST) pinleri, Arduino’daki pin 3’e kadar pin 7’den bağlanır.

Ancak ne yazık ki LCD’nin 3v iletişim seviyeleri var, bu yüzden bu pinleri doğrudan Arduino’ya bağlayamıyoruz. Biraz korumaya ihtiyacımız var. 

Seviyeleri değiştirmenin ucuz ve en kolay yollarından biri, her veri aktarım pini ile seri içi dirençler eklemektir. CLK, DIN, D / C ve RST pinleri arasına 10kΩ direnç ve CE arasına 1kΩ direnç ekleyin.

Son olarak, arka ışık (BL) pini, 330Ω akım sınırlama direnci ile 3.3V’ye bağlanır. Parlaklığını kontrol etmek istiyorsanız, bir potansiyometre ekleyebilir veya bu pini PWM özellikli herhangi bir Arduino pinine bağlayabilirsiniz.

Aşağıdaki şema, her şeyi nasıl bağlayacağınızı gösterir.

Arduino 5110 Bağlantı Şeması
Arduino 5110 Bağlantı Şeması

Nokia 5110 LCD Modülü için Kitaplığı Yükleme

PCD8544 LCD denetleyici esnek ancak karmaşık sürücülere sahiptir. PCD8544 kontrol cihazını kullanmak için bellek adresleme konusunda geniş bilgi gereklidir. Neyse ki, Adafruit’un PCD8544 Nokia 5110 LCD kitaplığı , tüm karmaşıklıkları kaldırmak için yazılmıştır, böylece ekranı kontrol etmek için basit komutlar verebiliriz.

Kitaplığı kurmak için Sketch> Include Library> Manage Libraries’e gidin… Library Manager’ın kütüphaneler dizinini indirmesini ve kurulu kütüphanelerin listesini güncellemesini bekleyin.

Arduino 5510 Kütüphane Yükleme
Arduino 5510 Kütüphane Yükleme

Aramanızı ‘nokia’ yazarak filtreleyin. Birkaç giriş olmalı. Adafruit PCD8544 Nokia 5110 LCD kitaplığını arayın. Bu girişe tıklayın ve ardından Yükle’yi seçin.

Arduino 5510 Kütüphane Yükleme 2
Arduino 5510 Kütüphane Yükleme 2

Bu kütüphane, daha düşük seviyeli fonksiyonları işleyen donanıma özel bir kütüphanedir. Nokta, çizgi, daire, dikdörtgen vb. Grafik temellerini görüntülemek için Adafruit GFX Kitaplığı ile eşleştirilmesi gerekir. Bu kitaplığı da kurun.

Arduino 5510 GFX Kütüphane Yükleme
Arduino 5510 GFX Kütüphane Yükleme

Arduino Kodu – Metin Yazdırma

Şimdi ilginç şeyler geliyor!

Aşağıdaki test taslağı “Merhaba Dünya!” Yazdırır. Ayrıca şunları içerir:

  • Ters çevrilmiş metni görüntüleme
  • Sayıları Görüntüleme
  • Tabanlı Sayıları Görüntüleme (Hex, Dec)
  • ASCII sembollerini görüntüleme
  • Metni Döndürme

Bu, Nokia 5110 LCD ekranının nasıl kullanılacağı konusunda size tam bir destek sağlayacaktır ve daha pratik deneyler ve projeler için temel oluşturabilir. Taslağı deneyin, sonra onu biraz ayrıntılı olarak inceleyeceğiz.

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

int rotatetext = 1;

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

	
	display.begin();

	display.setContrast(57);
//Ekran Parlaklığı ayarı

	display.clearDisplay();
//Ekranı temizler

	// Yazı yazdırır
	display.setTextSize(1);
	display.setTextColor(BLACK);
	display.setCursor(0,0);
	display.println("Hello world!");
	display.display();
	delay(2000);
	display.clearDisplay();


	//Renkleri Terslenmiş yazı yazdırır
	display.setTextColor(WHITE, BLACK); 
	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();

	// Hex kodu yazdırır
	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();

	// ASCII karakter yazdırır.
	display.setCursor(0,0);
	display.setTextSize(2);
	display.write(3);
	display.display();
	delay(2000);
	display.clearDisplay();

	// Yazı Yönü değiştirir.
	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++;
	}
}

void loop() {}

Şimdi Kodlarımızı inceleyelim

Taslak, üç kitaplık dahil ederek 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 hangi Arduino pinlerinin LCD’nin CLK, Din, D / C, CE ve RST pinlerine bağlandığını belirtir. 

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>


Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

int rotatetext = 1;

Kurulum işlevinde: LCD nesnesini begin()işlevi kullanarak başlatmamız gerekir . Ayrıca setContrast(value), değeri 0-100 arasında herhangi bir yerde olabilen fonksiyon kullanarak ekranın kontrastını ayarlamamız gerekir . Ancak 50-60 arası değer harika sonuçlar verir.

Ardından, ekrana ilk mesajımızı yazdırmadan önce tamponu temizliyoruz.


display.begin();

display.setContrast(57);

display.clearDisplay();

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

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

Ekrandaki metni 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 ileterek yapılabilir .

Ardından, fonksiyonu çağırarak yazı tipi rengini ayarlamamız gerekiyor setTextColor(). Koyu arka plan için SİYAH parametresini ve parlak arka plan için BEYAZ’ı iletin. Şimdi mesajı yazdırmadan önce, işlevi çağırarak imleç konumunu ayarlamamız gerekiyor setCursor(X,Y).

Ekrandaki pikseller, yatay (X) ve dikey (Y) koordinatlarıyla adreslenir. Koordinat sistemi orijini (0,0) sol üst köşeye yerleştirir; pozitif X sağa doğru artar ve pozitif Y aşağı doğru artar.

Seri monitöre 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 taşıyacak.

Kütüphanenin ekran arabelleğinde (saniyede 100 kareden fazla) son derece hızlı matematiksel işlemler gerçekleştirmesi için, yazdırma işlevlerine yapılan çağrılar, ekran arabelleğinin içeriğini hemen PCD8544 denetleyicisine aktarmaz. display()Kütüphaneye ATmega328P’deki ekran tamponundan PCD8544 denetleyicisinin dahili belleğine toplu aktarımı gerçekleştirmesi talimatını vermek için bir komut gereklidir. Hafıza aktarılır aktarılmaz, ekran tamponuna karşılık gelen pikseller LCD ekranda görünecektir.

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

Arduino 5110 Hello World Ters
Arduino 5110 Hello World Ters

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

Tersine çevrilmiş metni görüntülemek için setTextColor(FontColor,BackgroundColor)işlevi tekrar çağıracağız . Dikkat ediyorsanız, bu işleve daha önce yalnızca bir parametre geçirdiğimizi biliyorsunuz, ancak şimdi iki parametreyi aktarıyoruz. Bu, işlev aşırı yükleme denen bir şey nedeniyle mümkündür . İşlev aşırı yükleme, aynı adda, ancak farklı parametreler 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.

Bizim durumumuzda geçiş setTextColor(BLACK, WHITE), dolu arka plan üzerinde siyah metin oluşturacaktır.

Yazı Tipi Boyutunu Ölçeklendirme

Arduino 5110 Hello World Daha büyük Yazdırma
Arduino 5110 Hello World Daha büyük Yazdırma
display.setTextColor(BLACK);
display.setCursor(0,0);
display.setTextSize(2);
display.println("Hello!");
display.display();
delay(2000);
display.clearDisplay();

Bu öğreticide daha önce, setTextSize()yazı tipi boyutunu ayarlamak için function’ı çağırdık ve parametre olarak 1’i geçtik. Negatif olmayan herhangi bir tamsayı geçirerek yazı tipini ölçeklemek için bu işlevi kullanabilirsiniz.

Karakterler 5: 7 oranında oluşturulur. Yani, yazı tipi boyutu 1’i geçmek, metni karakter başına 5 × 7 piksel olarak işleyecektir; 2’yi geçmek, metni karakter başına 10 × 14 piksel olarak oluşturur ve bu böyle devam eder.

Adafruit_GFX kitaplığı yazı tipini oluşturmaktan sorumludur. Varsayılan olarak, tek aralıklı yazı tipi seçilir. Ancak, Adafruit GFX kitaplığının daha yeni sürümleri, alternatif yazı tiplerini kullanma olanağı sunar. Kitaplıkla birlikte birkaç alternatif yazı tipi gelir, ayrıca yenilerini ekleme yeteneği vardır.

Sayıları Görüntüleme

Arduino 5110 Sayı Yazdırma
Arduino 5110 Sayı Yazdırma
display.setTextSize(1);
display.setCursor(0,0);
display.println(123456789);
display.display();
delay(2000);
display.clearDisplay();

Numaralar sadece arayarak print()veya println()işlevle LCD ekranda görüntülenebilir . Bu işlevlerin aşırı yüklenmiş bir uygulaması 32 bit işaretsiz int kabul eder, bu nedenle yalnızca 0 ile 4,294,967,295 arasındaki sayıları görüntüleyebilirsiniz.

Sayılar İçin Taban Belirtme

Arduino 5110 HEX Yazdırma
Arduino 5110 HEX Yazdırma
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şlevleri kullanımı bazı (format) belirtir isteğe bağlı ikinci bir parametre vardır; izin verilen değerler BIN (ikili veya taban 2), OCT (sekizlik veya taban 8), DEC (ondalık veya taban 10), HEX (onaltılık veya taban 16). Kayan noktalı sayılar için bu parametre, kullanılacak ondalık basamakların sayısını belirtir. Örneğin:

  • baskı (78, BIN) “1001110” verir
  • print (78, OCT) “116” verir
  • print (78, DEC) “78” verir
  • baskı (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

Arduino 5110 ascıı yazdırma invert
Arduino 5110 ascıı yazdırma invert
display.setCursor(0,0);
display.setTextSize(2);
display.write(3);
display.display();
delay(2000);
display.clearDisplay();

print()println()Ederken fonksiyonları insan tarafından okunabilir ASCII metin olarak ekrana veri göndermek write()fonksiyon ekrana ikili veri gönderir. Dolayısıyla, ASCII sembollerini görüntülemek için bu işlevi kullanabilirsiniz. Örneğimizde 3 numaralı gönderim kalp sembolünü gösterecektir.

Metin Döndürme

Arduino 5110 Yöndeğiştirme
Arduino 5110 Yöndeğiştirme
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()Fonksiyonu çağırarak ekranın içeriğini döndürebilirsiniz . Ekranınızı dikey modda görüntülemenizi veya ters çevirmenizi sağlar.

İşlev, 4 ana rotasyona karşılık gelen yalnızca bir parametreyi kabul eder. Bu değer, 0’dan başlayarak negatif olmayan herhangi bir tam sayı 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.

Arduino Kodu – Temel Çizimler

Bu örnekte, bazı temel çizimler deneyeceğiz. Bu çizim, dikdörtgenler, yuvarlak dikdörtgenler, daireler ve üçgenler dahil olmak üzere birçok çizim işlevini gösterir. Taslağı deneyin, sonra onu biraz ayrıntılı olarak inceleyeceğiz.

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

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

	
	display.begin();

	display.setContrast(57);

	display.clearDisplay();

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


	display.fillRect(0, 0, 60, 40, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();


	display.drawRoundRect(0, 0, 60, 40, 8, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();


	display.fillRoundRect(0, 0, 60, 40, 8, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();


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

	display.fillCircle(20, 20, 20, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();


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


	display.fillTriangle(20, 0, 0, 40, 40, 40, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();
}

void loop() {}

Temel çizimler çizmek için aşağıdaki kod parçacıkları dışında kodun çoğu (kitaplıklar dahil ve ekranı başlatma) yukarıdaki kod örneğiyle aynıdır.

Dikdörtgen Çizim

Arduino 5110 kare yazdırma
Arduino 5110 kare yazdırma
Arduino 5110 kare yazdırma Ters Renk
Arduino 5110 kare yazdırma Ters Renk
display.drawRect(0, 0, 60, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();


display.fillRect(0, 0, 60, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();

drawRect()Fonksiyonunu kullanarak ekrana dikdörtgen çizebilirsiniz . İşlev, yani beş parametre alır. X koordinatı, Y koordinatı, Genişlik, Yükseklik ve renk. Aslında bu işlev, 1 piksel kenarlıklı içi boş dikdörtgen çizer. fillRect()Fonksiyonu kullanarak dolu dikdörtgen çizebilirsiniz .

Köşeleri yuvarlatılmış Dikdörtgen Çizimi

Arduino 5110 Yuvarlatılmış kare yazdırma
Arduino 5110 Yuvarlatılmış kare yazdırma
Arduino 5110 Yuvarlatılmış kare yazdırma Ters Renk
Arduino 5110 Yuvarlatılmış kare yazdırma Ters Renk
display.drawRoundRect(0, 0, 60, 40, 8, BLACK);
display.display();
delay(2000);
display.clearDisplay();


display.fillRoundRect(0, 0, 60, 40, 8, BLACK);
display.display();
delay(2000);
display.clearDisplay();

drawRoundRect()Fonksiyonunu kullanarak ekranda yuvarlak dikdörtgen çizebilirsiniz . Bu işlev, drawRect()bir ek parametre – Köşe yuvarlama yarıçapı dışında işlevle aynı parametreleri alır . Aslında bu işlev, 1 piksel kenarlıklı içi boş yuvarlak dikdörtgen çizer. fillRoundRect()Fonksiyonunu kullanarak dolu yuvarlak dikdörtgen çizebilirsiniz .

Çember Çizimi

Arduino 5110 daire yazdırma
Arduino 5110 daire yazdırma
Arduino 5110 daire yazdırma Ters Renk
Arduino 5110 daire yazdırma Ters Renk
display.drawCircle(20, 20, 20, BLACK);
display.display();
delay(2000);
display.clearDisplay();

display.fillCircle(20, 20, 20, BLACK);
display.display();
delay(2000);
display.clearDisplay();

drawCircle()Fonksiyonu kullanarak ekranda daire çizebilirsiniz . İşlev, yani dört parametre alır. Merkezin X koordinatı, merkezin Y koordinatı, yarıçap ve renk. Bu fonksiyon, 1 piksel kenarlıklı içi boş daire çizer. fillCircle()Fonksiyonunu kullanarak içi dolu daire çizebilirsiniz .

Üçgen Çizim

Arduino 5110 ucgen yazdırma
Arduino 5110 ucgen yazdırma Ters Renk
Arduino 5110 ucgen yazdırma Ters Renk
display.drawTriangle(20, 0, 0, 40, 40, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();


display.fillTriangle(20, 0, 0, 40, 40, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();

drawTriangle()Fonksiyonu kullanarak ekranda üçgen çizebilirsiniz . Fonksiyon yedi parametre alır, yani. Üçgen ve renk köşelerinin 3 X ve Y koordinatları (x0, y0, x1, y1, x2 & 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ıklı içi boş üçgen çizer. fillTriangle()Fonksiyonu kullanarak dolu üçgen çizebilirsiniz .

Bitmap ile Resim Görüntüleme

Bu son örnek, Nokia 5110 LCD Ekranına bit eşlem resimlerinin nasıl çizileceğini gösterir. Bu, şirket logolarının açılış ekranlarını oluşturmak, hareketli yazılar oluşturmak veya yalnızca 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üklemeye tıklayın.

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

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);

	display.begin();

	display.setContrast(57);

	display.clearDisplay();

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

	
}

void loop() {}

Çıktı böyle görünüyor.

Arduino 5110 resim yazdırma invert
Arduino 5110 resim yazdırma invert

Nokia 5110 LCD ekranında bit eşlem görüntüsünü göstermek için drawBitmap()işlevi aramamız gerekir . Altı parametre alır, yani. Sol üst köşe X koordinatı, sol üst köşe Y koordinatı, tek renkli bitmap 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. Bu nedenle, X ve Y koordinatları 0’a, genişlik ve yükseklik ise 84 ve 48’e ayarlanır.

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

Ancak drawBitmap()işlevi çağırmadan önce çizmek için bir resme ihtiyacımız var. Unutmayın, Nokia 5110 LCD ekranının ekran çözünürlüğü 84 × 48 pikseldir, bu nedenle bundan daha büyük resimler düzgün görüntülenmeyecektir. Doğru boyutta bir görüntü elde etmek için, tuval boyutunu 84 × 48 piksel olarak ayarlayarak Inkscape, Photoshop, Paint, vb.

Gülen Marilyn Monroe görüntüsünü örnek aldık ve Paint kullanarak 84 × 48 piksele dönüştürdük ve .bmp olarak kaydettik.

Resim
Resim

Bir bit eşleminiz olduğunda, onu PCD8544 denetleyicisinin anlayabileceği bir diziye dönüştürme zamanı. Bu, iki yolla yapılabilir: image2cpp kullanılarak çevrimiçi yöntem ve LCD Yardımcısı kullanılarak Çevrimdışı yöntem.

Çevrimiçi Bitmap Dizi Oluşturucu – image2cpp

Image2cpp adında bir çevrimiçi uygulama var – http://javl.github.io/image2cpp/ , görüntünüzü bir diziye dönüştürebilir. Image2cpp, LCD Assistant’tan daha yeni ve çok daha güçlüdür (sonraki çözüm). Şunları yapmanıza izin verecektir:

  • Birden çok görüntüyü aynı anda dönüştürün.
  • Görüntü dosyanızı ölçeklendirin – Uzat / Sığacak şekilde ölçekle / Orijinal
  • Siyah ve beyaz arasındaki Parlaklık eşiğini ayarlayın.
  • Görüntüyü dikey ve / veya yatay olarak yeniden ortalayın.
  • Ters görüntü renkleri

Bu araç o kadar güçlü ki çevrimdışı da çalışabilir. Sayfayı bilgisayarınıza kaydedin ve tarayıcınızda açın. Sayesinde Jasper van Loenen onun mükemmel katkılardan ötürü.

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.

Online Bitmap Çevirme Sitesi
Online Bitmap Çevirme Sitesi

Resminizin boyutları, Resim ayarları altındaki Tuval boyutu seçeneğinde doldurulacaktır. 84 × 48’den daha büyük bir görüntü seçtiyseniz, bunu 84 × 48 olarak değiştirin ve uygun Ölçekleme seçeneğini seçin. Çıktıyı Önizleme bölümünde görüntüleyebilirsiniz.

Gerekirse Arka Plan rengini veya Ters Görüntü renklerini değiştirebilirsiniz.

Son olarak, en önemli seçeneği – Parlaklık eşiğini ihtiyacınıza göre değiştirin. Eşiğin ayarlanması, bu seviyenin üzerindeki pikselleri beyaz ve siyahın altında yapacaktır. Bizim durumumuzda Marilyn Monroe’nun güzel detaylarını almak için 171 olarak ayarladık.

arduino 5110 resim sitesi 1
arduino 5110 resim sitesi 1

Bu küçük önizleme, ayarlarınızda yaptığınız değişiklikleri yansıtır. Gözünüzü ayırmadan ayarları değiştirebilirsiniz.

arduino 5110 resim sitesi 2
arduino 5110 resim sitesi 2

Sonuçtan memnun olduğunuzda, veri dizisini oluşturmaya devam edebilirsiniz. Arduino Kodu olarak Kod çıkış formatını seçin ve Kod oluştur düğmesine tıklayın.

Sadece bilginiz için, Çizim modu adında bir seçenek var. Aslında ekranın tarama kalıbına göre görüntü oluşturur. Görüntünüz ekranınızda tamamen dağınık görünüyorsa, modu değiştirmeyi deneyin.

arduino 5110 resim sitesi output
arduino 5110 resim sitesi output

Bu kadar. Bit eşleminizin bayt dizisi oluşturulacaktır. Çıktıyı doğrudan örnek kodumuzla kullanabilirsiniz. Sadece uygun şekilde adlandırdığınızdan emin olun. Ardından dizinizi drawBitmap()işlevin içinde çağırın .

arduino 5110 resim sitesi output 1
arduino 5110 resim sitesi output 1

Çevrimdışı Bitmap Array Generator – LCD Yardımcısı

LCD yardımcısı adında başka bir uygulama var – http://en.radzio.dxp.pl/bitmap_converter/ bitmap görüntünüzü veri dizisine dönüştürebilir. İmage2cpp kadar güçlü değil ama hobiler arasında hala popüler.

Başlamak için, görüntünüzü 84 × 48 1 bit monokrom bitmap’e dönüştürmeniz gerekir. Bunu yapmak için Inkscape, Photoshop, Paint gibi favori çizim programlarınızı kullanabilirsiniz, tıpkı MS boyamada yaptığımız gibi.

Dosyanızı MS Paint’te açın ve 84 × 48 olarak yeniden boyutlandırın.

Resim Seçme
Resim Seçme

Şimdi dosyanızı bit eşlem olarak kaydedin. Dosyayı kaydederken Farklı kaydet tipini seçin: Tek Renkli Bit Eşlem (*. Bmp; *. Dib). Bu, her piksel için yalnızca iki olası değere sahip, yani 0 (siyah) veya 1 (beyaz) olan 1 bit / ikili bitmap görüntüsü oluşturacaktır.

arduino 5110 resim sitesi resize 2
arduino 5110 resim sitesi resize 2

Buradaki tek dezavantaj, parlaklık eşiği seviyesini ayarlayamamanızdır. Varsayılan olarak% 50’ye ayarlanmıştır ve değiştirilemez.

Her neyse, şimdi LCD asistan programını indirin. Yürütülebilir dosyayı açın ve bit eşleminizi Dosya menüsünden yükleyin.

arduino 5110 resim sitesi resize 3
arduino 5110 resim sitesi resize 3

Bu araçla yapabileceğiniz pek bir şey yok. Bu nedenle, Dosya menüsüne gidin ve Çıktıyı kaydet seçeneğine tıklayın. Dosyayı metin dosyası olarak kaydedin.

Sadece bilginiz için, Bayt Yönlendirme adlı bir seçenek var. Aslında ekranın tarama kalıbına göre görüntü oluşturur. Görüntünüz ekranınızda tamamen dağınık görünüyorsa, modu değiştirmeyi deneyin.

Kayıt etme
Kayıt etme

Bu kadar. Oluşturduğunuz diziyle kodunuza yapıştırın. Sadece uygun şekilde adlandırdığınızdan emin olun. Ardından dizinizi drawBitmap()işlevin içinde çağırın .

You may also like

Leave a Comment