SSD1306 detaylı tüm fonksiyonlar etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
SSD1306 detaylı tüm fonksiyonlar etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Arduino SSD1306 Oled Ekran Grafik Fonksiyonları | SSD1306TUR Library

 Arduino ile OLED Ekran SSD1306 ile Grafik İşlemleri

    Arduino ile Oled ekranlarda SSD1306TUR kütüphanesi ile tüm grafik işlemleri fonksiyonlarına bakıyor olacağız. Ekranın kullanımı ve Arduino Uno 'ya bağlantısı gibi giriş seviyesi konulara hakim değilseniz : Arduino oled ekran kullanımı konusunu ziyaret edebilirsiniz. Bu yazıda yalnızca oled ekran ile grafiksel fonksiyonları inceliyor olacağız. Aşağıdaki fonksiyonları kullandıktan sonra ekranda yaptığınız değişikliklerin görüntülenmesi için display.display(); fonksiyonunu kullanmayı unutmayın.

writeFillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)

fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) fonksiyonu da kullanılabilir.

İçi dolu bir dikdörtgen çizmenize olanak sağlar, kullanılan parametreler :

  • x : ekran üzerindeki yatay konum (en sol 0)
  • y: ekran üzerindeki dikey konum (en üst 0)
  • w: çizilecek dikdörtgenin genişliği (piksel)
  • h: çizilecek dikdörtgenin yüksekliği (piksel)
  • color: renk

display.writeFillRect(0,10,50,10,1);

İçi boş bir dikdörtgen çizmek için aynı parametrelerle 

display.drawRect(0, 10, 50, 10, 1);

fonksiyonunu kullanabilirsiniz.

setRotation (uint8_t x)

Ekran yönünü değiştirmenize olanak sağlar, farklı tasarımlarda ya da montaj durumuna göre ekranın yönünü çevirmek için kullanabilirsiniz. X parametresi, 
  • 0 : mevcut konumu,
  • 1 : 90 derece sağa, pinler sol tarafta ekrana bakarsanız düz konuma gelmiş olur
  • 2: 180 derece sağa, tam ters posizyonu alır ekran pinleri aşağıda kaldığında ekran düz konuma gelmiş olur
  • 3: 90 derece sola, pinler sağ tarafta kalacak şekilde ekran düz konumda olur.
ekran çevirme işlemi fonksiyon kullanıldıktan sonra kullanılan fonksiyonlar için geçerli olur.

display.setRotation(2);

fonksiyonu SSD1306 ekranı ters çevirir.

fillScreen(uint16_t color)

Ekranın tamamını tek renkle doldurmanıza olanak sağlar.

display.fillScreen(SSD1306_WHITE);

drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color)

Ekrana çizgi çizmenize olanak sağlar, x0, y0 noktasından başlayan x1,y1 noktasında son bulan bir çizgi çizdirir :

display.drawLine(0,0,127,31,SSD1306_WHITE);

ekranın sol üstünden başlayan sağ altına kadar giden bir çizgi çizer.

drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color)

Ekrana merkezi x0,y0 noktasında olan ve yarı çapı r pixel olan color renginde bir daire çizer. Eğer daireniz yeterince daireymiş gibi görünmüyorsa, bu ekranın dikey piksel aralığının yatay piksel aralığından daha fazla olmasından kaynaklanıyor olabilir ya da yüksekliğinizi düşük girmiş olabilirsiniz. Yüksekliği 64 piksel olan ekran için 32 piksel girerseniz ekranınız dikey olarak olduğundan geniş görüneceğinden daire değil de elips görüyor olacaksınız ekranda.

display.drawCircle(64,15,15,SSD1306_WHITE);

aynı patametrelerle fillCircle fonksiyonunu içi dolu bir daire çizmek için kullanabilirsiniz:

display.fillCircle(64,15,15,SSD1306_WHITE);

drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color)

Ekrana merkezi x0,y0, notasında r piksel yarı çapında color renginde bir dairenin çeyreklerini çizmenize olanak sağlar, bu fonksiyon yardımıyla köşe noktaları yuvarlak olan dikdörtgen butonlar çizebilirsiniz, tabi drawLine falan da kullanmanız gerekecek, bunun için özel bir fonksiyon var, aşağılarda yazıyor olacak; cornername parametresini 4 bitlik ikili sayı sisteminde bir değer olarak düşünün 1 ler basamağınız 1 ise dairenin sol üst çeyreğini, 2 ler basamağınız 1 ise sağ üst çeyreğini, 4 ler basamağınız 1 ise sağ alt çeyreğini, 8 ler basamağınız 1 ise sol alt çeyreğini çizdirebilirsiniz. Daha kolayınıza gelsin diye kütüphanenin tanımlamalarını kullanabilirsiniz, köşe sayınız birden fazla ise aralarına | or koymanız işinizi çözecektir :

display.drawCircleHelper(63,15,5,CORNLUP | CORNRDN,SSD1306_WHITE);

merkezi x=63, y=15 te olan 5 piksel yarı çapındaki bir dairenin sol üst ve sağ alt çeyreğini ekrana çizer.


drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color)

Ekranda x0,y0,x1,y1,x2,y2 noktalarında köşeleri bulunan color renginde içi boş bir üçgen çizer 

display.drawTriangle(0,0,63,31,127,0,SSD1306_WHITE);

aynı parametrelerle içi dolu bir üçgen çizmek için :

display.fillTriangle(0,0,63,31,127,0,SSD1306_WHITE);

kulanabilirsiniz.

drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color)

Sol üst köşesi x,y noktasında olan w piksel genişliğinde h piksel yüksekliğinde kenarları r piksel yarı çapında oval olan içi boş bir dikdörtgen çizmenize olanak sağlar.

display.drawRoundRect(10,10,70,20,5,SSD1306_WHITE);

aynı parametrelerle içi dolu bir dikdörtgeni:

fillRoundRect(10,10,70,20,5,SSD1306_WHITE);

fonksiyonuyla çizebilirsiniz.




Arduino Oled Ekran Kullanımı | SSD1306 Detaylı Tüm Fonksiyonlar

ssd1306 drawbitmap

 

Bu yazıda, Arduino ile ssd1306 oled ekranın SSD1306TUR kütüphanesiyle kullanımına ve tüm fonksiyonlarına bakıyor olacağız. Arduino demişken;

  • ATmega328 : Arduino UNO, Adafruit Pro Trinket, Adafruit Metro 328, Adafruit Metro Mini
  • ATmega32u4 : Arduino Leonardo, Arduino Micro, Arduino Yun, Teensy 2.0, Adafruit Flora, Bluefruit Micro
  • ATmega2560 : Arduino Mega
  • ESP8266 : Adafruit Huzzah
  • ATSAM3X8E : Arduino Due
  • ATSAMD21 : Arduino Zero, M0 Pro, Adafruit Metro Express, Feather M0
  • ATtiny85 : Adafruit Gemma, Arduino Gemma, Adafruit Trinket
  • Particle: Particle Argon
tamamı ile testi yapılmış çalıştığı görülmüştür.

Kütüphane nasıl yüklenir ? : SSD1306TUR | SSD1306 Oled Ekran Türkçe Kütüphane linkini takip edebilirsiniz.

SSD1306 Arduino UNO I2c Bağlantısı

Arduino ssd1306 bağlantısı


    
    Ekranın I2c protokolü üzerinden Arduino Uno 'ya bağlantısı şu şekilde :

Ekran Pini Arduino Uno Pini
GNDGND
VDD5V
SCKA4
SDAA5

Ekranın Başlatılması

    Uygulamaya başlamadan önce tanımlarımızı sayfanın en üstünde yapıyoruz :

#include "SSD1306TUR.h"
#include "TrFonts/FreeSansBold12pt7bTR.h"

#define SCREEN_WIDTH 128 // OLED display genişlik piksel sayısı
#define SCREEN_HEIGHT 32 // OLED display yükseklik piksel sayısı
#define OLED_RESET -1    // varsa reset pini yoksa -1
#define SCREEN_ADDRESS 0x3C // Datasheete bakınız; 0x3D
                            // -> 128x64, 0x3C -> 128x32
SSD1306TUR display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

sonrasında setup fonksiyonu içerisinde ekranımızı başlatıyoruz :

void setup()
{
   if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS))
  {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;)
      ; // Don't proceed, loop forever
  }
  display.clearDisplay();
}

artık display nesnesiyle ekranımızı yönetmeye başlayabiliriz.

clearDisplay()

    Ekranın tampon datasını siler, tüm pikseller kapalı duruma gelir.

display.clearDisplay();

display()

Display fonksiyonu ekran için yaptığınız işlemlerin ekranda gösterilmesini sağlar, aşağıdaki ya da grafik işlemleri konusunda yazdığımız tüm fonksiyonlardan sonra bu fonksiyonu kullanmamız gerekiyor, aksi halde kullanılan fonksiyonlar uno'nun ram indeki buffer da saklanıyor, ekrana gönderilmiyor.

display.display();

String İşlemleri

Ekrana yazı yazdırmak için kullanabileceğimiz fonksiyonlara bakalım; 

setTextColor() 

setTextColor(uint16_t textColor)

    Ekrana herhangi bir şey yazdırmadan önce yazı rengini belirlemeniz gerekiyor, belirlemezseniz kütüphane varsayılan olarak SSD1306_WHITE olarak seçiyor, zaten monochrome bir ekran için başka bir şansınız yok, piksel ya görünüyordur açıktır yani, ya da kapalıdır, kapalı olma durumu da SSD1306_BLACK ile seçilebilir. 

display.setTextColor(SSD1306_WHITE);

    
setTextColor(uint16_t textColor, uint16_t bgColor)

Arka plan da belirlemek istiyorum derseniz bunu sadece yazı kapalı arka plan görünür olsun istediğiniz için kullanırsınız, diğer durumda arka plan zaten siyahtır, yani inverse text yapmak için: ilk parametre yazı rengi ikinci parametre yazı arka plan rengi olarak verilebiliyor :

display.setTextColor(SSD1306_BLACK, SSD1306_WHITE);

setTextSize(uint8_t size)

Yazılacak metnin boyutunu ayarlar, bu karakter boyutunuzun bir çarpanı gibi düşünülebilir, karakterini 6x8 ise ve fonksiyona 2 değerini göndermişseniz, karakterleriniz 12x16 olarak basılır. Fonksiyonun kullanım zorunluluğu yoktur; kullanılmazsa karakter olduğu boyutlarda ekrana basılır.

display.setTextSize(2);

setFont(const GFXfont *f)

Yazılacak metnin fontunu belirlemenizi sağlıyor, metin yazılmadan önce belirtilmeli. İçerisine parametre olarak gfx fontlardan birinin adresini (font isminin yanında & olmalı) girmelisiniz. Font isimlerini nerden bulabilirim? kütüphanenin içinde TrFonts klasörünün içinde bulunan fontlardan, hangisini seçecekseniz onun dosya ismiyle font ismi aynı ayarlanmıştır, farklı olabilir mi? bunun için font dosyasını açtığında en altta font tanımlamasını göreceksin :

const GFXfont FreeSansBold12pt7bTR PROGMEM

fonksiyona parametre olarak vermen gereken şey tam olarak budur:

 display.setFont(&FreeSansBold12pt7bTR);

Ee bir tane font var başka yok mu? Türkçe karakter destekleyen henüz yok. Desteklemeyenlere de Adafruit GFX library içerisinde Fonts klasöründen ulaşabilirsin, projene bu fontları dahil etmek için :

#include "Fonts/FreeSans12pt7b.h"

Fonts/ yazıp font dosya adını yazman yeterli.

setCursor(int16_t x, int16_t y)

Yazılacak metnin ekrandaki pozisyonunu belirlemenizi sağlıyor, x yatay düzlemdeki genişliğe denk gelen değer y dikey düzlemde yüksekliğe denk gelen değer 0,0 ekranın sol üst köşesini ifade eder ve piksel cinsinden değerlerdir.

display.setCursor(20, 22);

metninizi 20 piksel sağa 22 piksel aşağıya kaydırmış olur.

print(const __FlashStringHelper *ifsh)

Fonksiyonun görünümü sizi korkutmasın, içine çift tırnak içinde yazacağınız metni yazmanız yeterli

display.print("Türkçe");

yazdıktan sonra metnin sonuna satır bitirme eklemek isterseniz ki bu durumda bundan sonra yazdıracağınız metin bir alt satırdan başlar, bu durumda println kullanabilirsiniz:

 display.println("SSD1306");


Grafik İşlemleri

invertDisplay(bool i)

Parametresi true ise ekrandaki açık olan pikselleri kapalı, kapalı olan pikselleri açık duruma getirir, false ise eski haline döndürür:

display.invertDisplay(true);

dim(bool dim)

Parametresi true ise ekranın daha az parlaklıkla çalışmasını sağlar, false ise, tam parlaklık durumudur, varsayılan olarak ekran tam parlaklık modunda çalışır.

display.dim(true);

drawPixel(int16_t x, int16_t y, uint16_t color)

Ekran üzerinde sadece bir pikseli açmak kapatmak ya da inverse etmek için kullanılır :

display.drawPixel(5,5,1);

5,5 koordinatındaki pikseli 1 ile açabiliriz, bunun yerine SSD1306_WHITE tanımlaması da kullanılabilir.

drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color)

Ekran üzerinde yatay bir çizgi çizmenizi sağlar, x parametresi hangi x pikselinden başlayacağınızı, y hangi y satırını kullanacağınızı, w parametresi kaç piksel uzunluk istediğinizi, color parametresi rengi belirmenizi sağlar:

display.drawFastHLine(5,31,123,SSD1306_WHITE);

5. x pikselinden başlayan 31. numaralı yatay satırda, 123 piksel genişliğinde bir çizgi çizer.

drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color)

Ekran üzerinde dikey bir çizgi çizmenizi sağlar, x parametresi çizginin olacağı piksel sütununu, y parametresi hangi y pikselinden başlayacağınızı, h parametresi kaç piksel yükseklik istediğinizi, color parametresi rengi belirler.

display.drawFastVLine(2,0,32,SSD1306_WHITE);

2. kolonda 0. cı y pikselinden başlayan 32 piksel yüksekliğinde beyaz renkli bir çizgi çizer.

startscrollright(uint8_t start, uint8_t stop)

Ekranının tamamını ya da bir bölümünü sağa doğru kaydırmanızı sağlar. start ilk satırı stop son satırı ifade eder, satır demişken 8 piksel yüksekliğinde bir bloktan bahsediyoruz, ekranın yukardan aşağıya doğru 4 e bölündüğünü düşünebilirsiniz, 0,0 en üstteki 1,1 bir altındakini 2,2 alttan ikinciyi, 3,3 de en alttaki satırı sağa kaydırır: 

display.startscrollright(2,2);

ekranın 16. pikselinden başlayıp 23. pixeline kadar uzanan bloğu sağa kaydırır. Aynı mantıkla :

display.startscrollleft(3,3);

de en sondaki satırı sola doğru kaydırıyor, hem sağa hem sola farklı satırları da olsa kaydıramıyoruz. kaydırmayı sonlandırmak için :

display.stopscroll();

fonksiyonunu çağırmamız yeterli.



Şimdilik herkese kolay gelsin.



Türksat Saat Kanalı ve IRIG-B Time Code

Türksat Saat Kanalından Saat Bilgisi Nasıl Alınır? Uyduda kanalları dolaşırken, şu Türksat Saat kanalı hep dikkatimi çekmiştir. Özellikle  S...