Arduino Uygulamaları Adafruit GFX Library ve kullanımı

| Mart 21, 2021 Tarihinde güncellendi
Arduino Uygulamaları Adafruit GFX Library ve kullanımı

Amatör deneylerime Arduino ile devam etmeye karar verdiğimde bazı araştırmalar yapınca çok yüzeysel örneklerin internet ortamında çok bulunduğunu izlemledim. Özellikle -bazı ciddi siteler dışında- çoğu sitelerde çalıştığı bile incelenmeden uygulamaların yayınlanması üzücü bir durum olduğunu gördüm. Bu uygulamaları deneyen benim seviyemde amatörlerin hüsrana uğramalarının ne kadar üzücü oluşunu anlatmak mümkün değil. Yaptığım denemelerin sizler tarafından kolay denenebilmesi amacı ile hiç bir ek gerektirmeyecek şekilde yapmaya çalıştım. Yine de ek gerektirecek bir durum olur ise yaşlılığıma verin, hoş görün. Sözü uzatmadan ilk uygulamamıza geçelim.

Adafruit GFX Library ve kullanımı

Arduino ve diğer işlemcilere ek ürünler imal eden Adafruit firması bu eklerin kullanımını yaygınlaştırmak amacı ile ürün ile ilgili Library hazırlamakta ve kullanıma sunmaktadır. Kütüphanerin içerisinde örnekler de bulunmaktadır. Bu örnekler genelde kütüphane dosyasının kullanımı ile ilgidir. Bu örnekleri amaca uygun halde değiştirmek ve kullanmak mümkündür. Ayrıca bu dosyaların kullanım klavuzlarını da incelemekte mümkündür. Bu kütüphaneler bu firma ürünü olayan benzer ürünler için kullanılabilir. Konu ile ilgili açıklayıcı bilgilere aşağıda verilen bağlantılardan ulaşabilisiniz.

Kütüphane dosyası indirme linki: github.com/adafruit/Adafruit-GFX-Library

Kütüphane dosyası tüm sürümleri için gerekli link ise; arduinolibraries.info/libraries/adafruit-gfx-library

Library kullanımı ile ilgili bilgilere ; learn.adafruit.com/adafruit-gfx-graphics-library?view=all henrysbench.capnfatz.com/henrys-bench/arduino-adafruit-gfx-library-user-guide/

Kullanılan GLCD ise 2.8 inc ölçülerinde ILI9341 sürücü entegreli ve SPI bağlantısı ile çalışmaktadır. SPI bağlantısını aşağıda mavi renkle belirtilmiştir.

arduino-nano-pinout-diagram-schematic

Bu bağlantı şeması Arduino nano’nundur. Arduino uno ve mini modellerinde bağlantı numaraları aynıdır sadece uno modelinde A6 ve A7 bacakları bulunmamaktadır. Bunun nedeni ise DIL kılıfındaki atmega 328’de bu pinler bulunmamaktadır. SMD kullanılan entegre uno modelerinde ise bu bacaklar dışarı çıkarılmamıştır.
Kullanılan ekranını bacak bağlatısı ise aşağıda gösterilmektedir.

Resimde bağlantı pinleri görülmektedir. TOUCH olarak belirtilen pinler dokunmatik pinleri bazı modellerde boştur. Benim elimde bulunan 2.4 inc ve 2.8 inc ekranlarda boştur. Yani touch panel yoktur. Aşağıda ise iki bağlantı şekli bulunmaktadır. Ekranlar 3.3V. çalıştığından lojik seviyenin de 3.3V. olması gerekir. Bunu aşağıda gösterildiği gibi CD4050 entegresi ile sağlayabiliriz. Ancak MİSO (SDO) pini yanlış bağlanmıştır. Çünkü bu pin giriş değil çıkıştır. Bir başka anlatımla CD4050 entegresinin 2 ile 3 nolu pinleri değişmeli ya da bağlanmamalıdır. Bağlanmaması çalışmasına mani değildir.

arduino-nano-cd4050

Aşağıdaki bağlantı ise dirençlerle lojik seviye düşürülmektedir.

arduino-nano-2-4lcd-2-8lcd

ILI9341 GLCD Hakkında

1- Kullanılan ekran 240 x 320 pikseldir. Yani enine 240 boyuna ise 320 pikseldir. Sürücü entege ILI9341 olup SPI bağlantısı ile çalışmaktadır. Burada şunu açıklamakta yarar var. SPI bağlantsında SCK ve SDI (MOSİ) pinlrini yeri değiştiştirilemez. SDO (MOSİ) ise bağlanmayabilir. SCK pini – Uno, Nano ve Mini’de 13 numaralı pine, SDI ise 11 nomaralı pine bağlanmalıdır. CS, DC, RESET pinleri ise istenilen pinlere bağlanabilir. Hatta RESET pin Arduino’nun RESET pinine de bağlanabilir.

ili9341-lcd-arduino-gfx

Kullanılan ekranda TOUCH bulunmamaktadır. Pin tanıtımında ise SDI ve SCK pinleri SPI kütüphanesinde tanıtıldğı için tanıtılmaz. Yani tanıtım aşağıdaki gibi olabilir;

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#define TFT_DC   9
#define TFT_CS  10
#define TFT_RST  8
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

ili9341-lcd-pixel-arduino-gfx

Ekranın sol üst köşesi 0,0 koordinatlarıdır. Ekran çevrinse dahi bu kural değişmez. Program yazarken ise önce x sonrada y değeri yazılır. Örneğin bir nokta -pixel- belirtirken;

tft.drawPixel( x, y, renk);
tft.drawPixel( 30, 50, WHITE);

şeklinde yazılır.

arduino-tft-ili9341-line-start-drawline-lcd-arduino-gfx

Çizgi -line- çizerken ise sırayla başlangıç -x- değeri, başlangıç -y- değeri, bitiş -x- değeri, bitiş -y- değeri ve çizgi rengi şeklinde olmalıdır.

tft.drawLine( 0, 10, 220, 110, YELLOW); //belirlenen x,y,x,y Sarı rekli çizgi çiz.

arduino-2019-tft-ili9341-line-start-drawline-lcd-arduino-gfx

Dörtgen çizerken ise başlangıç -x- değeri, başlangıç -y- değeri, -x- kenar uzunluğu ve çizgi rengi şeklinde sıralanır.

tft.drawRect(50, 50, 140, 220, BLUE); x, y, noktasından başlayarak -x- yönünde 140 pixel boyunda, -y- yönünde 220 pixel boyunda mavi renkli bir dikdörtgen çiz. Dik dörtgenin içeride boyasın istersek ise,

tft.fillRect(50, 50, 140, 220, BLUE); şeklinde yazmalıyız. yani -draw – kelimesi -fill- ile değiştirilmelidir.

Uygulamalarda ekranı ve Arduino nano’yu 3.3v. ile beslediğimden böyle bir devreye gerek kalmamaktadır. Program yüklenirken Nano besleme hattından ayrılmakta çalışmada ise +5V. pini 3.3V. bağlanmaktadır. Burada şunu belirtmeen geçmemek gerekir Arduino’nun 3.3V çıkışı burada kullanılamaz. Çünkü ekran bağlandığında 3.3 Volt çok düşmektedir. Şimdi ilk uygulamamıza geçelim ve ekrana noktalar basalım. Kullanım notlarına bir göz atalım;

arduino-nano-lcd-pixel-horizontal-pixel-color-drawpixel-arduino

Yukarıdaki örnek ” tft.drawPixel( 5, 10, WHITE);”

#include <SPI.h>              //SPI kütüphanesini ekleyelim.
#include <Adafruit_GFX.h>     //grafik kütüphanesini ekleyelim.
#include <Adafruit_ILI9341.h> //ekran sürücü kütüphanesini ekleyelim.
#define TFT_DC 9              //ekranın DC pininin bağlanacağı nano pinini tanımlayalım
#define TFT_CS 10             //ekranın CS pininin bağlanacağı nano pinini tanımlayalım
#define TFT_RST 8             //ekranın RESET pininin bağlanacağı nano pinini tanımlayalım
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
#define BLACK    0x0000       //kullanılacak renkleri tanımlayalım
#define BLUE     0x001F       //farklı renk seçimi ileride anlatılacaktır.
#define RED      0xF800
#define GREEN    0x07E0
#define CYAN     0x07FF
#define MAGENTA  0xF81F
#define YELLOW   0xFFE0
#define WHITE    0xFFFF 
void setup() {
   tft.begin();               //ekranı başlatalım.
}

void loop() {
  tft.fillScreen(RED);    //ekran kırmızıya boyanmaktadır.
  tft.drawPixel( 30, 50, WHITE);  // x=30, y=50 beyaz bir nokta oluşurar
  tft.drawPixel( 31, 50, WHITE);  //x=31, y=50 beyaz bir nokta oluşurar
  tft.drawPixel( 33, 50, WHITE);  //x=33, y=50 beyaz bir nokta oluşurar. 
 delay(1000);        //bir saniye gecikme
}

Yukarıda yazılı programı yüklediğinizde ekran kırmızı renkle doldurulmakta ve belirlenen koordinatlarda üç beyaz nokta bir saniye görülmekte sonra bir an silinmekte ve tekrar belirmektadir.

nokta-arduino-yazilim

Şimdi ekranda kayan nokta basalım;

Not: Alıntı olup orjinalini saklayıp gerekli değişiklikler yapıldı.

henrysbench.capnfatz.com/henrys-bench/arduino-adafruit-gfx-library-user-guide/arduino-adafruit-gfx-pixels-and-lines/ (Alıntı linki)

#include <SPI.h>
#include <Adafruit_GFX.h>
//#include <TFT_ILI9163C.h>
#include <Adafruit_ILI9341.h> //ekran sürücü kütüphanesini ekleyelim.

// Pallete - Where you assign names to colors you like
#define BACKCOLOR 0x0000 // Black
#define PIXELCOLOR 0xFFFF  // White

//#define CS 10
//#define DC 9
#define TFT_DC 9              //ekranın DC pininin bağlanacağı nano pinini tanımlayalım
#define TFT_CS 10             //ekranın CS pininin bağlanacağı nano pinini tanımlayalım
#define TFT_RST 8             //ekranın RESET pininin bağlanacağı nano pinini tanımlayalım
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

// Declare an instance of the ILI9163
//TFT_ILI9163C tft = TFT_ILI9163C(CS, 8, DC);  

void setup() {
  tft.begin();
  tft.fillScreen(BACKCOLOR);  
}

void loop(){ 
  
  // 128 represents screen width
 /* for(int x = 0; x < 128; x++){
    tft.drawPixel( x, 50, PIXELCOLOR);
    delay(50);  // increase to make the dot move slower.  Decrease to move faster
    tft.drawPixel(x,50,BACKCOLOR);    
  }   */
  for(int x = 0; x < 240; x++){
    tft.drawPixel( x, 50, PIXELCOLOR);
    delay(50);  // increase to make the dot move slower.  Decrease to move faster
    tft.drawPixel(x,50,BACKCOLOR);    
  }   
}

Bu yazılım yüklendiğinde ekranda x ekseninde kayan bir nokta oluşur.

Diğer Arduino örnekleri;

Ekrana çizgiler çizme
Ekrana dikdörtgenler çizme
Ekrana küçülen dikdörtgenler çizme
Köşeleri radiuslu dikdörtgen çizme
İçiçe dikdörtgenler çizme
+ 4 adet daha..

Seri devam edecek.

Arduino Uygulamaları Adafruit GFX Library ve kullanımı yazısına ait tüm Arduino yazılım dosyaları; Dosya indirme LINK listesi (TXT formatında) link-25607a.zip

Bakü 01/09/2018

Yayım tarihi: 2018/09/04 Etiketler: , ,



1 Yorum “Arduino Uygulamaları Adafruit GFX Library ve kullanımı

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.