SSD1306TUR etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
SSD1306TUR 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.



SSD1306TUR | SSD1306 Oled Ekran Türkçe Kütüphane

SSD1306 Oled Ekran Türkçe Karakter Kullanımı

ssd1306 türkçe

    Arduino ya da benzeri gömülü sistem uygulamalarımızda ekran ihtiyaçlarımızdan birini de SSD1306 Oled monochrome ekranlar karşılıyor. Daha önceden kullananlarınız olduysa bilirler ki malesef ekranların çoğu gibi bu ekran da Türkçe karakterleri desteklemiyor (henüz benim elime geçmemiş olanlar), Daha önce 16x2 20x4 I2c ve paralel mode için ve P10 paneller için Türkçe karakter destekli kütüphaneler yayınlardım, bunlara sitedeki arama fonksiyonunu kullanarak ulaşabilirsiniz.
    Son olarak SSD1306 Oled ekranlar için geliştirdiğim Türkçe karakter destekli kütüphane de bugün yayınlandı:
    Kütüphaneye
  • Github
  • Arduino Library Manager
  • PlatformIO Libraries
üzerinden ulaşabilirsiniz.


Arduino IDE ile SSD1306 Ekran Tükçe Kullanımı ve Kütüphanenin İndirilmesi


arduino ide kütüphane ekleme

    Arduino IDE üzerinde bulunan menüden Tools * Manage Libraries... seçeneğine tıklayarak ya da Ctrl+Shift+L tuş kombinasyonuyla açılan Library Manager 'ın arama alanına SSD1306TUR yazdığınızda sizi karşılayan ekranda  Install  butonuna :

SSD1306TUR Türkçe kütüphane yükleme

ardından, eğer sisteminizde AdafruitGfx ve diğer bağımlı kütüphaneler yüklü değilse gelen uyarıya :

SSD1306TUR Türkçe kütüphane yükleme

 Install all  butonuna tıklayarak yüklememizi gerçekleştirebiliriz.


Kullanımı oldukça basit, ekranla mesainiz varsa sizin için hiç bir değişiklik yok header dosyasını projenize dahil edin ve aşağıdaki örnekteki gibi kullanın :

/**
 * @file writeTr_128x32_i2c.ino
 * @author Hakan ÖZMEN (hakkanr@gmail.com)
 * @brief
 * @version 1.0
 * @date 2022-11-09
 * @section for more information please visit :
 * https://www.devrelerim.com/2022/11/ssd1306tur-ssd1306-oled-ekran-turkce.html
 * https://www.youtube.com/HakkanR
 * https://github.com/HakkanR/SSD1306TUR
 * @copyright Copyright (c) 2022
 * BDS License, all above text must be included any redistribution.
 */
#include <Wire.h>
#include <SSD1306TUR.h>
#include "TrFonts/FreeSansBold12pt7bTR.h"

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
// The pins for I2C are defined by the Wire-library.
// On an arduino UNO:       A4(SDA), A5(SCL)
// On an arduino MEGA 2560: 20(SDA), 21(SCL)
// On an arduino LEONARDO:   2(SDA),  3(SCL), ...
#define OLED_RESET -1		// Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
SSD1306TUR display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void TrTextsOnScr();
void setup()
{
	Serial.begin(115200);
	// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
	if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS))
	{
		Serial.println(F("SSD1306 allocation failed"));
		for (;;)
			; // Don't proceed, loop forever
	}
	// Clear the buffer
	display.clearDisplay();
	TrTextsOnScr();
}

void loop()
{
	// put your main code here, to run repeatedly:
}
void TrTextsOnScr()
{
	display.setTextColor(SSD1306_WHITE);
	display.clearDisplay();
	display.setTextSize(1);
	display.println("       SSD1306");
	display.setFont(&FreeSansBold12pt7bTR);
	display.setCursor(20, 22);
	display.print("Türkçe");
	display.display(); 
	delay(3000);
}


Şuan için kütüphanede yalnızca bir tane font var, font tasarımına vakit ayırabilirim diyen arkadaşlarım bana ulaşabilirlerse sevinirim, hem bu sayede gömülü sistemlerin Türkiye ayağında open source bir kütüphaneye katkınız olur ve adınız geçer! 😎

Kütüphane ile ilgili fonksiyonları ve kullanımları : Arduino ile oled ekran kullanımı detaylı tüm fonksiyonlar

Grafik Fonksiyonları

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...