7 Ocak 2017 Cumartesi

Arduino TFT ekran ve Timer


Şimdiye kadar Görüntü işleme, Python, C++ ile ilgili çeşitli örnekler paylaştım. Bu defa küçük bir farklılık yapıp Arduino ile bir örnek uygulama paylaşmak istiyorum. Gerçekleştirdiğim bu uygulamada Arduino Mega 2560 ve ER_TFTM043_3 lcd ekran kullanılmıştır. Uygulamada amaç tft lcd ekranı sürmek ve bu ekranı timer kullanarak güncellemektir. Bunun için UTFT ve TimerOne kütüphaneleri kullanılmıştır. 

(Not: LCD görüntüsü aşağıdaki gibidir, yazının sonunda videoyu da izleyebilirsiniz)


Uygulamanın kodlarına adım adım bakacak olursak;

İlk olarak ilgili header doayalarını projeye ekliyoruz. (kütüphane dosyaları mevcut değilse, indirip Arduino\libraries dizinine kopyalamalısınız)

#include <UTFT.h>
#include <avr/pgmspace.h>
#include <TimerOne.h>

Akabinde TFT ekran için bağlantı pinlerini ve ekranda görüntülenecek yazı için 2 farklı seceneği projeye ekliyoruz.

UTFT myGLCD(ER_TFTM043_3,38,39,40,41);

extern uint8_t SmallFont[];
extern uint8_t BigFont[];

Dinamik olarak değiştirilecek renk degiskeni ve ekranda gosterilecek mesaj dizisini tanımlıyoruz.

short renk = 30;
char Grid_Message[][16] = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16",};


Daha sonra Arduino'nun ilk kurulum ayarlarının yapıldığı setup fonksiyonu içerisinde Timer ve myGLCD 'yi başlatıyoruz. 

   Timer1.initialize(150000); 

   Timer1.attachInterrupt( ekran_renk ); 
// Setup the LCD
  myGLCD.InitLCD();
  
  // Clear the screen 
  myGLCD.clrScr();

Timer1.attachInterrupt içerisinde Timer süresi her dolduğunda çalıştırılacak olan fonksiyonu belirtiyoruz. Buna göre belirli aralıklarda (Timer.initialize ile belirtilen süre!) ekran_renk fonksiyonu çağrılacak. Bu fonksiyonun içerisine bakacak olursak gayet basit olduğunu göreceksiniz.

void ekran_renk()
{
  renk = renk+10;
  if (renk==150) renk = 30;
}

short tipinde tanımlanmış genel bir değişken olan renk değeri her bir timer aralığında 10 artırılıyor ve bu değer 150 'ye eşit olunca tekrar başa dönüyor. loop içerisinde ekrana yazma işleminin yapıldığı asıl kısma gelecek olursak ;


void loop() {

  // put your main code here, to run repeatedly:

  volatile int xartis = 120; // (480/4)

  volatile int yartis = 62; // (270/4)
  volatile int x,y;
  volatile int sayac = 0;
  
  for (int i=0; i<4; i+=1)
    for (int j=0; j<4; j+=1)
    {
        x = i * xartis;
        y = j * yartis;
        myGLCD.setColor(i*30,j*50, renk + (i+j)*20 );
        myGLCD.fillRoundRect(x, y, x+xartis, y+yartis);
        myGLCD.print(Grid_Message[sayac], x+30, y+30);
        sayac++;
    }
}

loop zaten Arduino için özel bir fonksiyon, programımız sürekli burada dönüyor. Bu örneğimizde zamanlayıcının kullanıldığı yer, ekranda gösterilen grid deki dikdörtgenlerin renklerinin timer(zamanlayıcı) ile değiştiriliyor olması.
 Bknz :   myGLCD.setColor(i*30,j*50, renk + (i+j)*20 );

Bu örnekte özet olarak, UTFT kütüphanesi ile ekranda basit işlemler yapmayı ve timer kullanmayı açıklamış olduk. UTFT kütüphanesinin ayrıntılı kullanımı için şu linki inceleyebilirsiniz.





Hiç yorum yok:

Yorum Gönder