Home Arduino %100 Arduino Oled Nasıl çalışır?

%100 Arduino Oled Nasıl çalışır?

by onurnp

Arduino Oled Nasıl çalışır ?

Arduino olsun diğer mikrodenetleyiciler olsun teknoloji geliştikçe elektronik bileşen fiyatları hızla düşmekte ve pahalı olan ürünler daha alınabilir hale gelmekte bu sayede karakter lcd ekran gibi eski teknolojilere artık veda zamanı geldi diye düşünüyorum..

Eski lcdler hem sınırlı karakter sayısı hemde ekranın ufaklığı olsun biz kullanıcılar oldukça kısıtlamaktaydı ve şimdi artık oled ekranımızı aldık yeni bir serüvene hazırız.

SSD1306 serisi ile arduino oled kullanacağız bu oledler 2 tip iletişim formu kullanmaktadır bunlar I2C ve SPI ki ben size i2c olanı tavsiye ederim bağlantı kablo sayısının az olması spi iletişimine göre nispeten kullanımının kolay olması daha avantajlı duruma getiriyor.

Oledlerimiz 128×164 , 128*64 piksellerde 2 boyutu bulunmakta tek renk ve iki renk seçenekleri bulunmaktadır.

Güç Gereksinimi

OLED ekran arka ışığı olmadan çalışır, çünkü oledler kendi ışığını yapar. Ekranın bu kadar yüksek kontrastlı, aşırı geniş görüş açısına sahip olmasının ve derin gerçek siyah görüntülemesinin nedeni budur . Arka ışığın olmaması, OLED’i çalıştırmak için gereken gücü önemli ölçüde azaltır. Ekranın ne kadarının yandığına bağlı olmasına rağmen, ortalama olarak ekran yaklaşık 20mA akım kullanır .

SSD1306 kontrol cihazının çalışma voltajı 1.65V ila 3.3V arasındadır. Bu, herhangi bir mantık seviyesi dönüştürücü kullanmadan bir Arduino veya herhangi bir 5V mantık mikrodenetleyicisine kolayca bağlanmasını mümkün kılar.

Arduino OLED Bellek Haritası

OLED modülünün boyutundan bağımsız olarak, SSD1306 sürücüsünde, görüntülenecek bit desenini tutan ekran için yerleşik bir 1KB Grafik Ekran belleği (GDDRAM) bulunur. Bu 1K hafıza alanı 8 sayfada düzenlenir (0’dan 7’ye kadar). Her sayfa 128 sütun içerir (0 ila 127). Ve her sütun 8 bit veri saklayabilir (0’dan 7’ye).

8 sayfa x 128 segment x 8 bit veri = 8192 bit = 1024 bayt = 1KB bellek

Sayfaları, segmentleri ve verileri içeren 1K belleğin tamamı aşağıda vurgulanmıştır.

1KB 128x64 OLED Ekran RAM Bellek Haritası
Arduino oled satır haritası

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

128 × 64 OLED ekran RAM’in tüm içeriğini kullanırken 128 × 32 OLED ekran yalnızca 4 sayfa (yarım içerik) RAM kullanır.

İşte tüm özellikler:

Görüntü TeknolojisiOLED (Organik LED)
MCU ArayüzüI2C / SPI
Ekran boyutuBoyunca 0.96 İnç
çözüm128 × 64 piksel
Çalışma gerilimi3.3V – 5V
Çalışma AkımıMaks. 20mA
Görüş açısı160 °
Satır Başına Karakter21
Karakter Satırı Sayısı7
SSD1306 Teknik Özellikler

SSD1306 Arduino Oled Çıkışları

Oled Bağlantı Çıkışları
Arduino Oled Bağlantı Çıkışları

GND : Arduino’nun toprağına bağlı olmalı

VCC : Arduino’ya 3.3 voltluk pini bağladığımız ekranın güç kaynağıdır.

SCL : I2C arayüzü için seri saat pinidir.

SDA : I2C arayüzü için seri veri pinidir.

OLED ekran modülünü Arduino Uno’ya kablolama

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

Bağlantılar oldukça basittir. VCC pimini Arduino’daki 5V çıkışına bağlayarak başlayın ve GND’yi toprağa bağlayın.

Şimdi I2C iletişimi için kullanılan pinlerle kalıyoruz. Her Arduino Kartında buna göre bağlanması gereken farklı I2C pinleri bulunduğunu unutmayın. R3 mizanpajlı Arduino kartlarında, SDA (veri hattı) ve SCL (saat hattı) AREF pimine yakın pim başlıklarında bulunur. A5 (SCL) ve A4 (SDA) olarak da bilinirler.

Mega’nız varsa, pimler farklıdır! Dijital 21 (SCL) ve 20 (SDA) kullanmak isteyeceksiniz. Hızlı anlamak için aşağıdaki tabloya bakın.

Arduino TürüSCLSDA
Arduino UnoA5A4
Arduino NanoA5A4
Arduino Mega2120
Leonardo / Mikro32
Arduino I2C Çıkışları
Arduino Oled bağlantısı
Arduino Oled bağlantısı

OLED Ekran Modülü için Kütüphane Kurulumu

Arduino OLED ekranın SSD1306 denetleyicisi esnek ancak karmaşık sürücülere sahiptir. SSD1306 denetleyicisini kullanmak için bellek adresleme konusunda geniş bilgi gereklidir. Neyse ki, Adafruit SSD1306 kütüphanesi , ekranı kontrol etmek için basit komutlar verebilmemize SSD1306 denetleyicisinin karmaşıklıklarını gizlemek için yazılmıştır.

Arduino kütüphane girişi
Arduino oled kütüphane girişi

Kitaplığı yüklemek için Sketch> Kitaplığı Dahil Et> Kitaplıkları Yönet… ‘e gidin. Kitaplık Yöneticisi’nin kitaplıklar dizinini indirmesini ve yüklü kitaplıkların listesini güncellemesini bekleyin.

Arama bölümüne ‘adafruit ssd1306’ yazarak filtreleyin. Birkaç kütüphane göreceksiniz.Ancak biz Adafruit tarafından Adafruit SSD1306 kütüphanesini kullanacağız. Kütüphaneye tıklayın ve ardından Yükle’yi seçin.

Arduino Oled kütüphane Yükleme Ekranı
Arduino Oled kütüphane Yükleme Ekranı

Bu Adafruit SSD1306 Kütüphanesi, alt düzey işlevleri işleyen donanıma özgü bir kitaplıktır. Noktalar, çizgiler, daireler, dikdörtgenler gibi grafik ilkelleri görüntülemek için Adafruit GFX Kütüphanesi de yüklenmelidir .

Arduino Oled GFX Kütüphanesi Ekranı
Arduino Oled GFX Kütüphanesi Ekranı

SSD1306 Denetleyicide Bilinen Sorun SSD1306’da ekran için yerleşik bir GDDRAM olmasına rağmen, bunun içeriğini okuyamıyoruz ( 
Adafruit’a göre ). 
Bu nedenle, matematiksel işlemleri gerçekleştirmek için ekran arabelleğini değiştirmek mümkün değil. Alternatif olarak, kütüphane ATmega328P’den tampon olarak 1KB (128 × 64) / 8 bit bellek ayırır. 
Böylece, ekran arabelleğini değiştirebilir ve daha sonra ATmega328P’nin belleğinden SSD1306 denetleyicisinin dahili belleğine toplu bir aktarım gerçekleştirir.

Adafruit SSD1306 Kütüphanesini Değiştirme

Adafruit SSD1306 Kütüphanesi 128 × 64 OLED ekranlar için ayarlanmamıştır (şu anda kullandığımız). Eğer 128×32 ekran kullanacaksak Adafruit_SSD1306.h başlık dosyasında bizim için uygunlarştırmak için ekran boyutu değiştirilmelidir. Değiştirilmezse, #error (“Yükseklik yanlış, lütfen Adafruit_SSD1306.h!” Düzeltin) Gibi bir hata mesajı görüntülenir.

Arduino Oled Boyut Hatası
Arduino Oled Boyut Hatası

Adafruit_SSD1306.h başlık dosyasını değiştirmek için, eskiz defteri konumunuzu açın. Genellikle Belgelerim> Arduino. Şimdi kütüphanelere gidin> Adafruit_SSD1306

Bu kadar. Şimdi dosyayı kaydedin ve Arduino IDE’nizi yeniden başlatın.

Arduino Oled Kodlama

Şimdi ilginç şeyler geliyor!

Aşağıdaki Kod blogunu kullanarak örnek Ekran çizimlerimizi deneyip değiştirerek Kütüphane kullanımı konusunda Tecrübe edinebilirsiniz. Çeşitli komutlar ile Aşağıdaki işlemleri basitçe gerçekleştirebilirsiniz.

  • Renkleri Ters Çevir
  • Numara Yazdırma
  • Float Numaraları Yazdırma (Onaltılı, Ara)
  • ASCII sembollerini Yazdırma
  • Metni Yatay ve Dikey Olarak Kaydırma
  • Ekranın bir kısmını kaydırma

Çizim oluştururken, IDE düşük bellek uyarı mesajı görüntüler. Bunun nedeni kütüphanenin ekran arabellek olarak ATmega328P’den 1 KB bellek ayırmasıdır. Bunu göz ardı edebilirsiniz.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 display(-1);

void setup()   
{                
	// Oledimizi i2c Adresini girdik 0x3C
	display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  

	// Arduino Oledimizin Tampon belleğini temizledik
	display.clearDisplay();

	// Ekrana Yazı Yazdırdık Eğer değişkenin değerini yazdırmak isteseydik tirnaklari koymazdık
	display.setTextSize(1);
	display.setTextColor(WHITE);
	display.setCursor(0,28);
	display.println("Elektronik Atolyem!");
	display.display();
	delay(2000);
	display.clearDisplay();

	// Renkleri Ters Çevirerek yazı yazdırdık
	display.setTextColor(BLACK, WHITE); // 'inverted' text
	display.setCursor(0,28);
	display.println("Elektronik Atolyem!");
	display.display();
	delay(2000);
	display.clearDisplay();

	// Yazı Boyutunu setTextSize komutu ile değiştirdik
	display.setTextColor(WHITE);
	display.setCursor(0,24);
	display.setTextSize(2);
	display.println("Hello!");
	display.display();
	delay(2000);
	display.clearDisplay();

	// Ekrana Numaralar yazdırdık
	display.setTextSize(1);
	display.setCursor(0,28);
	display.println(123456789);
	display.display();
	delay(2000);
	display.clearDisplay();

	// Hex değerleri yazdırdık.
	display.setCursor(0,28);
	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ırdık
	display.setCursor(0,24);
	display.setTextSize(2);
	display.write(3);
	display.display();
	delay(2000);
	display.clearDisplay();

	// Ekranı Kaydırdık
	display.setCursor(0,0);
	display.setTextSize(1);
	display.println("Elektronik Atolyem!");
	display.println("Ekran");
	display.println("Kaydır");
	display.display();
	display.startscrollright(0x00, 0x07);
	delay(2000);
	display.stopscroll();
	delay(1000);
	display.startscrollleft(0x00, 0x07);
	delay(2000);
	display.stopscroll();
	delay(1000);    
	display.startscrolldiagright(0x00, 0x07);
	delay(2000);
	display.startscrolldiagleft(0x00, 0x07);
	delay(2000);
	display.stopscroll();
	display.clearDisplay();

	// Ekranın Birbölümünü kaydırdık
	display.setCursor(0,0);
	display.setTextSize(1);
	display.println("Scroll");
	display.println("some part");
	display.println("of the screen.");
	display.display();
	display.startscrollright(0x00, 0x00);
}

void loop() {}

Şimdi parça parça hangi komutu nasıl neden kullandık işletelim Öncelikle 4 adet kütüphane ekledik. SPI.h, Wire.h, Adafruit_GFX.h ve Adafruit_SSD1306.h. I2C OLED ekranlar için SPI.h kütüphanesi gerekmese de, programımızı derlemek için onu eklememiz gerekir.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Sonra, Adafruit_SSD1306.h kütüphanesini çalıştırmamız ve tampon belleği sıfırlamamız gerekiyor. 

// Oledimizin I2C adresi 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

// Tampon Bellek sıfırlama
display.clearDisplay();

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

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

Ekranda metin görüntülemek için yazı tipi boyutunu ayarlamamız gerekir. Bu işi setTextSize()komutuyla parantezler arası 1 den başlayarak boyutlandırabiliriz.

Ardından  setTextColor() komutu ile yazının siyah yada beyaz olma durumunu belirtiriz 0 siyah 1 ise beyazdır. Koyu arka plan için 1 parametresini ve beyaz arka plan için 0 parametresini kullanırız. 

Şimdi mesajı yazdırmadan önce setCursor (X, Y) komutunu çağırarak imleç konumunu ayarlamamız gerekiyor. 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 taşıyacaktır.

Yazdığımız çıktıları ekrana verebilmek için display() Komutunu Kullanmamız gerekir şuana kadar yaptığımız tüm tranferler bellekte gerçekleşti şimdi bellekteki veriyi ekrana aktardık.

Ters Renkli Yazı yazdırma

Ters Renk Yazı Yazdırma
Arduino oled Ters Renk Yazı Yazdırma

display.clearDisplay();
display.setTextColor(BLACK, WHITE); // 'Renkleri Ters Çevrilmiş yazma komutu
display.setCursor(0,28);
display.println("Hello world!");
display.display();

Renkleri Ters çevrilmiş metin yazdırmak için kullanmanız gereken Komut setTextColor(FontRengi,ArkaplanRengi)Dikkat ettiyeniz bu işleve daha önce yalnızca bir parametre geçtiğimizi biliyorsunuz, ancak şimdi iki parametre geçiriyoruz. Bu, işlev yüklenmesi adı verilen Komutlama nedeniyle mümkündür . İşlev yüklenmesi, aynı adda ancak farklı parametre kümesiyle birden çok işlev oluşturma yeteneğidir . 

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

Yazı Tipi Boyutunu Ölçeklendirme

Yazı Boyutu Ayarlama
Yazı Boyutu Ayarlama
display.clearDisplay();
display.setTextColor(WHITE);
display.setCursor(0,24);
display.setTextSize(2);
display.println("Hello!");
display.display();

setTextSize()fonksiyonu ile yazı tipi boyutunu ayarlayabiliriz. Negatif olmayan bir tam sayı ileterek yazı tipini ölçeklendirmek için bu işlevi kullanabilirsiniz.

Karakterler 7:10 oranında oluşturulur. Yani, yazı tipi boyutu 1’i seçmek metni karakter başına 7 × 10 piksel oluşturacak, 2’yi geçmek metni karakter başına 14 × 20 piksel oluşturacak vb.

Adafruit_GFX kütüphanesi yazı tipini oluşturmaktan sorumludur. Varsayılan olarak tek tip yazı 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 şansımızda vardır.

Değişken Görüntüleme

Değişken Görüntüleme
Değişken Görüntüleme
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0,28);
display.println(123456789);
display.display();

Programınızda belirlediğiniz değişkenin içeriğini ekrana yazdırmanız da mümkündür bunun için print()veya println()fonksiyonu içeriği tırnaksız yazılarak yapılır. Bu fonksiyon ile 32 bit işaretsiz int’i kabul eder, bu nedenle yalnızca 0 ile 4,294,967,295 arasındaki değeri görüntüleyebilirsiniz.

Hexedecimal ve Decimal gibi değerler kullanım dönşümleri

Hex-Dec yazdırma ve dönüştürme
Hex-Dec yazdırma ve dönüştürme
display.setCursor(0,28);
display.print("0x"); display.print(0xFF, HEX); 
display.print("(HEX) = ");
display.print(0xFF, DEC);
display.println("(DEC)"); 
display.display();

print()Ve println()fonksiyonları izin verilen değerler içerisinde 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. float sayıları için, bu parametre kullanılır 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 Yazdırma

ASCII Sembol Yazdırma
ASCII Sembol Yazdırma
display.clearDisplay();
display.setCursor(0,24);
display.setTextSize(2);
display.write(3);
display.display();

print()println()Ederken fonksiyonları insan tarafından okunabilir ASCII metin olarak ekrana veri göndermek write()fonksiyon ekrana ikili veri gönderir. Bu nedenle, ASCII sembollerini görüntülemek için bu işlevi kullanabilirsiniz. Örneğimizde, 3 sayısı kalp simgesi Yazdırır.

Örnek Kullanabileceğiniz ASCII Karakter Tablosu;

ASCII Karakter Tablosu
ASCII Karakter Tablosu
ASCII Karakter Tablosu 2
ASCII Karakter Tablosu 2

Tam Ekran Kaydırma

Ekran Kaydırma
Ekran Kaydırma
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
display.println("Full");
display.println("screen");
display.println("scrolling!");
display.display();
display.startscrollright(0x00, 0x07);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollleft(0x00, 0x07);
delay(2000);
display.stopscroll();
delay(1000);    
display.startscrolldiagright(0x00, 0x07);
delay(2000);
display.startscrolldiagleft(0x00, 0x07);
delay(2000);
display.stopscroll();

Yatay ekranda kaydırma Fonksiyonu startscrollright()startscrollleft()ile yatay kaydırma yapabilirsiniz veya startscrolldiagright()startscrolldiagleft()çapraz kaydırma yapabilirsiniz .  Ekranda 0 ile 7 arasında sekiz sayfa olduğundan, 0x00 ve 0x07 parametrelerini ileterek tüm veri sayfalarını kaydırarak tüm ekranı kaydırabilirsiniz.

Ekranın kaymasını durdurmak için stopscroll()işlevi kullanabilirsiniz .

Satır kaydırma

display.setCursor(0,0);
display.setTextSize(1);
display.println("Scroll");
display.println("some part");
display.println("of the screen.");
display.display();
display.startscrollright(0x00, 0x00);

Bazen tüm ekranı kaydırmak istemiyoruz. Sadece bir satırı kaydırmak isteyebiliriz Bunu yapmak için kaydırma fonksiyonuna uygun başlangıç ​​sayfası ve durdurma sayfası bilgilerini ileterek yapabilirsiniz. Sayfaların açıklaması için OLED Bellek Haritası bölümüne bakın. Ekranda 0 ile 7 arasında sekiz sayfa olduğundan, belirli sayfa numaralarını parametre olarak ileterek ekranın bir kısmını kaydırabilirsiniz.

Örneğimizde, her iki parametreyi de 0x00 olarak geçtik. Bu, ekranın yalnızca ilk sayfasını (ilk 8 satır) kaydırır.

Arduino Oled Ekranda Çizim yapmak

Ekranımıza bazen karakterler dışında dikdörtgen,kare,üçgen gibi özgün çizimler yapmamız gerekebilir bu gibi isteklerimizi de kolayca yapabiliriz.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 display(-1);

void setup()   
{                
	display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 
	display.clearDisplay();

	display.setTextSize(1);
	display.setTextColor(WHITE);
	display.setCursor(0,0);
	display.println("Rectangle");
	display.drawRect(0, 15, 60, 40, WHITE);
	display.display();
	delay(2000);
	display.clearDisplay();

	display.setTextSize(1);
	display.setTextColor(WHITE);
	display.setCursor(0,0);
	display.println("Filled Rectangle");
	display.fillRect(0, 15, 60, 40, WHITE);
	display.display();
	delay(2000);
	display.clearDisplay();

	display.setTextSize(1);
	display.setTextColor(WHITE);
	display.setCursor(0,0);
	display.println("Round Rectangle");
	display.drawRoundRect(0, 15, 60, 40, 8, WHITE);
	display.display();
	delay(2000);
	display.clearDisplay();

	display.setTextSize(1);
	display.setTextColor(WHITE);
	display.setCursor(0,0);
	display.println("Filled Round Rectangl");
	display.fillRoundRect(0, 15, 60, 40, 8, WHITE);
	display.display();
	delay(2000);
	display.clearDisplay();

	display.setTextSize(1);
	display.setTextColor(WHITE);
	display.setCursor(0,0);
	display.println("Circle");
	display.drawCircle(20, 35, 20, WHITE);
	display.display();
	delay(2000);
	display.clearDisplay();

	display.setTextSize(1);
	display.setTextColor(WHITE);
	display.setCursor(0,0);
	display.println("Filled Circle");
	display.fillCircle(20, 35, 20, WHITE);
	display.display();
	delay(2000);
	display.clearDisplay();

	display.setTextSize(1);
	display.setTextColor(WHITE);
	display.setCursor(0,0);
	display.println("Triangle");
	display.drawTriangle(30, 15, 0, 60, 60, 60, WHITE);
	display.display();
	delay(2000);
	display.clearDisplay();

	display.setTextSize(1);
	display.setTextColor(WHITE);
	display.setCursor(0,0);
	display.println("Filled Triangle");
	display.fillTriangle(30, 15, 0, 60, 60, 60, WHITE);
	display.display();
	delay(2000);
	display.clearDisplay();
}

void loop() {}

Dikdörtgen Çizimi

//Duz Renkli
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Rectangle");
display.drawRect(0, 15, 60, 40, WHITE);
display.display();
delay(2000);
//Ters Renkli
display.clearDisplay();  
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Filled Rectangle");
display.fillRect(0, 15, 60, 40, WHITE);
display.display();

drawRect()Fonksiyonu kullanarak ekranda dikdörtgen çizebilirsiniz . Fonksiyon beş parametre 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 Dikdörtgen Çizim

drawRoundRect()Fonksiyonu kullanarak ekranda yuvarlak dikdörtgen çizebilirsiniz . Bu işlev, bir ek parametre haricinde drawRect () işleviyle 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()Fonksiyonu kullanarak dolu yuvarlak dikdörtgen çizebilirsiniz .

Çember Çizdirme

display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Circle");
display.drawCircle(20, 35, 20, WHITE);
display.display();
delay(2000);

display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Filled Circle");
display.fillCircle(20, 35, 20, WHITE);
display.display();

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

Üçgen Çizim

display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Triangle");
display.drawTriangle(30, 15, 0, 60, 60, 60, WHITE);
display.display();
delay(2000);

display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Filled Triangle");
display.fillTriangle(30, 15, 0, 60, 60, 60, WHITE);
display.display();

drawTriangle()Fonksiyonu kullanarak ekranda üçgen çizebilirsiniz . Fonksiyon yedi parametre alır. Üçgen ve 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 .

Bitmap Yazdırma (Resim Yazdırma)

Arduino oled Bitmap Yazdırma Örneği
Arduino oled Bitmap Yazdırma Örneği

Evet arkadaşlar belkide en çok merak ettiğiniz ve istekli olduğunuz bölümün bu olduğunu düşünüyorum çünkü herşey karakterler ve düz çizimlerle olmuyor örneğin bir pil resmi yada gösterge çizebilmemiz gereken projelerimiz oluyor

Böyle projelerimizde tamda imzamıza yetişecek fonksiyonu uzatmadan anlatalım bakalım.

OLED ekranda bitmap görüntüsü göstermek için drawBitmap()işlevi çağırmamız gerekir . Altı parametre yer 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ü 128 × 64 boyutundadır. Bu nedenle, genişlik ve yükseklik 128 ve 64’e ayarlanırken X ve Y koordinatları 0’a ayarlanır.

display.drawBitmap(0, 0,  MarilynMonroe, 128, 64, WHITE);
display.display();
örnek Marlyn Monroe görseli
Örnek Resim
Resmi bitmap Dönüştürme

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 .

  • Aynı anda birden fazla görüntüyü dönüştürün.
  • Görüntü dosyanızı ölçeklendirme
  • Parlaklık eşiğini siyah ve beyaz arasında 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ışabiliyor. Sayfayı PC’nize kaydedin ve tarayıcınızda açın. 

Başlamak için tarayıcınızda image2cpp dosyasını açın ve OLED ekranında görüntülemek istediğiniz herhangi bir görüntüyü seçin.

image2cpp  kullanım ekranı
image2cpp kullanım ekranı

Görüntünüzün boyutları, Görüntü ayarları altındaki Tuval boyutu seçeneğinde bulunur. 128 × 64’ten daha büyük bir görüntü seçtiyseniz, görüntüyü 128 × 64 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 seçebilirsiniz.

Son olarak, en önemli seçeneğe geldik Brightnes Treshold Eşiğin ayarlanması bu seviyenin üstündeki pikselleri beyaz altında kalanları siyah yapar. Bizim durumumuzda Marilyn Monroe’nun güzel detaylarını almak için 171’e ayarladık.

Image2ccp İnce ayarları
Image2ccp İnce ayarları

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.

Marlyn Monroe BMP görseli
Marlyn Monroe BMP görseli

Sonuçtan memnun kaldığınızda, veri dizisini oluşturmaya devam edebiliriz. 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.

kod çıktısı alma
kod çıktısı alma

Evet arkadaşlar aldığımız çıktı kodlarını Yazılımımızda setup bölümünün üstüne ekliyoruz ve drawBitmap()işlevin içinde çağırın .

Evet arkadaşlar bu konu altında sizlere tüm detayları vermek istedim umarım faydalı olmuştur. Bizleri sosyal medyadan takip etmeyi unutmayın iyi Çalışmalar.

You may also like

Leave a Comment