Arduino ile Nokia 5110 LCD Ekran Kullanımı – Resim ve Şekil Görüntüleme
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;
- Arduino Uno R3
- Nokia 5110 LCD Ekran Modülü
- Jumper Kablo
- Mini Breadbord
- 1k Direnç
- 10k Direnç
- 330R Direnç
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.
- Nokia 5110 LCD Ekran Pixelleri
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.
- Nokia 5110 LCD Ekran Pinout
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.
- Nokia 5110 LCD Ekran Modülünü Arduino UNO ile Kablolama
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 5110 LCD Ekran Modülü Kullanımı için Arduino Kitaplığı Yükleme
‘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.
- Nokia 5110 LCD Ekran Modülü Kullanımı için Arduino Kitaplığı Arama
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.
- Nokia 5110 LCD Ekran Modülü Kullanımı için Adafruit GFX Kitaplığı Arama
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/C, CE 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)
- Arduino ile Nokia 5110 LCD Ekran Kullanımı – Yazı Yazma
// 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
- Arduino ile Nokia 5110 LCD Ekran Kullanımı – Ters Yazı Yazma
// 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
- Nokia 5110 Ekran Modülünde Yazı Tipi Boyutunu Değiştirme
// 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
- Arduino ile Nokia 5110 LCD Ekran Kullanımı – Rakamlar
// 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
- Sayılara Format Belirleme
// 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
- Nokia 5110 LCD Ekranda Sembol ve Şekiller
// 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
- Nokia 5110 Ekran 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
- Nokia Ekran İçi Boş ve Dolu 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
- Nokia Ekran İçi Boş ve Dolu Yuvarlak Kenarlı Dikdörtgen Çizimi
//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
- Nokia Ekran İçi Boş ve Dolu Yuvarlak, Daire, Çember
//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
- Nokia Ekran İçi Boş ve Dolu Üçgen
//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.
- Arduino ile Nokia 5110 LCD Ekran Kullanımı – Resim Görüntüleme
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.
Ç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.
Hepsi bu kadar. Umarım arduino ile nokia 5110 lcd ekran kullanımı ile resim, sembol, rakam ve yazı yazdırma görüntüleme makalemizi beğenmiş ve yeni bir şeyler öğrenmişsinizdir.
Memnun kaldıysanız aşağıda bulunan “yukarı ok“a tıklayarak +1 puan verebilirsiniz.
Diğer Güncel Arduino Projeleri için BURAYA TIKLAYABİLİRSİNİZ.
Sizde Robotlara ve Maker’lığa Meraklıysanız Robotik Marketimiz ROBOCOMBO‘yu Ziyaret Edebilirsiniz.
Robot El Yapımı – İlginç Arduino Projeleri
Videodaki Robot El Ürünümüzü Satın Almak İsterseniz Bağlantıya Göz Atabilirsiniz.
Okuduğunuz İçin Teşekkürler.
Kaynak: lastminuteengineers.com/nokia-5110-lcd-arduino-tutorial/