Arduino için PT6523 lcd sürücü kütüphanesi.
Bu kütüphaneyi aynı zamanda CT6523, LC75823, SC6523, RSM6523, LF6523, HXJ6523, LP75823, SL4816, SWE75823, ZL75823, TM75823, SJ75823, CS1685, ADS75823, AX75823, CS75823, LS75823, PM1725, PS75823, SC75823 sürücülerinde de kullanabilirsiniz.
Bu kütüphaneyi, KAMOSONIC marka eski bir araba kasetçalarının ön panelinde bulunan ekranı kullanarak oluşturdum. Büyük ihtimalle benim çalıştığım panelin aynısına sahip olmayacaksınız. Sizin sahibi olduğunuz lcd paneli, tamamen kendine özel alanlar içerecektir. Ancak yukarıdaki sürücülerin herhangi birini içerdiği sürece, segment ve sembol datalarını kendi kartınıza göre düzenleyerek, diğer lcd paneller için de kullanılabilirsiniz. Örnek olarak LC75823 sürücüsü kullanan başka bir lcd panel için düzenlenmiş halini, bu sayfada inceleyebilirsiniz.
- Arduino taslak klasörünüzde bulunan
libraries/
klasörünün altındaPT6523
adında yeni bir klasör oluşturun(libraries klasörü henüz mevcut değilse siz oluşturun). - Kütüphane dosyaları içinde bulunan
src/
veexample/
klasörlerini, yeni oluşturduğunuzPT6523/
klasörüne yerleştirin.
Arduino taslak klasörü, işletim sisteminize bağlı olarak aşağıdaki konumlarda bulunur(eğer değiştirmediyseniz).
- Linux için:
/home/<username>/Arduino/
veya/home/<username>/sketchbook/
- Windows için:
C:\Users\<username>\My Documents\arduino\
- Mac için:
/Users/<username>/Documents/Arduino/
Ayrıca Arduino IDE menüsünden Dosya > Tercihler
penceresini açtığınızda, "Taslak Defteri Konumu" alanından da öğrenebilir-değiştirebilirsiniz.
Dosyaları yerleştirdikten sonra, açık olan bütün Arduino IDE'leri kapatın. Tekrar açtığınızda, IDE otomatik olarak kütüphanelerinizi tekrar tarayacak ve yeni eklediğiniz kütüphaneyi de listesine ekleyecektir. Bunu kontrol etmek için, Arduino IDE'nizi açın ve Dosya > Örnekler
menüsü altında PT6523
satırını arayın. Bu satır üzerine geldiğinizde, kullanıma hazır bazı örnekler göreceksiniz.
Bu kütüphane SPI bağlantısı için standart Arduino SPI kütüphanesini kullanır. Bu nedenle;
- Data girişini Arduino 11 nolu pine (veya ICSP soketi üzerindeki 4 nolu MOSI pinine),
- CLK'yı ise Arduino 13 nolu pine (veya ICSP soketi üzerindeki 3 nolu SCK pinine),
- FCE (ChipEnabled, SlaveSelect) girişini Arduino 10 nolu pine bağlamak gerekiyor.
- INH girişini ise +5v. akımla beslemelisiniz.
Bu pinler Arduino Uno modeli için geçerli. Diğer Arduino modelleri için bu sayfadaki tabloya bakabilirsiniz. FCE (ChipEnabled, SlaveSelect) girişini ise bütün modellerde Arduino 10 nolu pine bağlıyoruz. Veya begin(<SlaveSelect pin>, <adres>)
fonksiyonundaki parametreyi başka bir pine ayarlayabilirsiniz. Bağlantı şeması görseldeki gibi olmalıdır.
Kütüphaneyi kendi projenizde kullanabilmek için, Arduino IDE menüsünde Taslak > library ekle > PT6523
yolunu takip edebilirsiniz. Veya kendiniz .ino
dosyanızın en üstüne aşağıdaki kodu ekleyin.
#include <PT6523.h>
Kütüphaneyi bu şekilde çalışmaya dahil ettikten sonra, kütüphanedeki PT6523
sınıfından yeni bir nesne üretmeniz gerekiyor.
PT6523 lcd;
Artık oluşturduğunuz bu yeni lcd
nesnesi ile, aşağıdaki fonksiyonları kullanabilirsiniz.
Bu fonksiyon lcd'yi başlatır. Chip enable (slaveSelect)
pin numarasının ve sürücünün SPI adresinin parametre olarak girilmesi gerekiyor. Ayrıca SPISettings()
ve SPI.begin()
gibi standart Arduino SPI fonksiyonlarını içerir ve chip enable pinini OUT
durumuna getirir. Bu işlemlerin ekrana yazdırma yapılmadan önce başlatılması gerektiği için, Arduino setup()
fonksiyonu içinde tanımlanması gerekiyor.
void setup()
{
lcd.begin(10, 130);
}
Girilen metni sabit biçimde ekrana yazdırır. Yazdırılacak metin char
türünde bir dizi değişkeni olarak girilebilir veya doğrudan ""
karakterleri arasında yazılarak parametre olarak girilmelidir. Ekran aynı anda 8 karakteri gösterebildiği için, girilen metnin ilk 8 karakteri ekranda görünür.
Kütüphane yalnızca ASCII karakter tablosundaki 32 - 127 arası karakterleri destekler. Bunun dışındaki karakterler ekranda iki karakterlik boşluk olarak görünür.
void loop()
{
char a[14]="MERHABA DUNYA";
lcd.text(a);
//veya
lcd.text("MERHABA DUNYA");
}
Girilen metni ekran üzerinde sağdan sola doğru kaydırarak yazdırır. Yazdırılacak metin char
tipinde bir dizi değişkeni olarak girilebilir veya doğrudan ""
karakterleri arasında yazılarak parametre olarak girilmelidir. Bu yazım şeklinde ekranda gösterilen metnin bir karakter sayı sınırı bulunmaz.
Kütüphane yalnızca ASCII karakter tablosundaki 32 - 127 arası karakterleri destekler. Bunun dışındaki karakterler ekranda iki karakterlik boşluk olarak görünür.
void loop()
{
char a[44]="ARDUINO PT6523 KUTUPHANESI. 01 TEMMUZ 2018";
lcd.sText(a);
//veya
lcd.sText("ARDUINO PT6523 KUTUPHANESI. 01 TEMMUZ 2018");
}
Metni taşıyan
char
dizisi tanımlanırken, dizisinin eleman sayısı metnin karakter sayısından 1 fazla olmalıdır. Eğer 12 harfli bir metin giriyorsanız, diziyi 13 elemanlı oluşturmalısınız. Böylece dizinin son elemanına/0
karakteri otomatik olarak yerleştirilir. Aksi halde, sonlandırma elemanı olmayan bir dizi ekrana yazdırılırken, kendisinden sonra tanımlanmış ya da bellekte kendisinden sonraki adreslerde bulunan alakasız veriler de ekrana yazdırılır.
Bazı durumlarda, char
, int
gibi farklı veri tiplerinden oluşan birden fazla veriyi, aynı anda ekrana yazdırmanız gerekebilir. Böylesi durumlarda, C++
fonksiyonlarından sprintf()'i kullanabilirsiniz. Aşağıdaki örnekte, bir int
değişkenin değeri ile bazı char
karakterler birleştirilerek, lcd nesnesinin sText()
fonksiyonuna parametre olarak giriliyor.
void loop()
{
int a = 4;
int b = 8;
char buffer[14];
sprintf (buffer, "%d ARTI %d = %d", a, b, a+b);
lcd.sText(buffer);
}
Sprintf()
fonksiyonu int
veri tipini desteklerken, float
tipindeki değişkenleri desteklemiyor. Bu durumu aşmak için dtostrf()
fonksiyonunu kullanabilirsiniz. Aşağıda, bir float
değişkenin değeri, dtostrf()
fonksiyonu ile başka bir char
dizisine aktarılıyor. Bir sonraki adımda ise sprintf()
fonksiyonunda başka bir char
dizisiyle birleştiriliyor. Ve son olarak sText()
fonksiyonu ile ekrana yazdırılıyor.
void loop()
{
char ss[2];
char scr[2];
int val = 0;
float volt;
val = analogRead(0);
volt = val * 0.00468;
dtostrf(volt, 4, 2, ss);
sprintf(scr, "%s V", ss);
lcd.text(scr);
}
Yukarıdaki örnek kodu içeren .ino dosyası:
PT6523/examples/Voltage_Level/Voltage_Level.ino
sText()
fonksiyonu ile soldan sağa kaydırılarak ekrana yazdırılan metnin, ekranda kaç defa döndüğü bilgisini int
tipinde dışa döndürür. Bir metnin görünürlüğünü, ekranda belirli sayıda tekrarladıktan sonra sonlandırmak istiyorsanız, bu fonksiyondan dönen değere göre işlem yapabilirsiniz. Aşağıdaki örnekte, girilen metin 3 defa ekranda döndükten sonra döngüden çıkılır ve bir sonraki
işleme geçilir.
void loop()
{
for (int i = 0; lcd.textLoopCount() < 3; i++)
{
lcd.sText("BU METIN EKRANDA 3 DEFA DONECEK.);
}
}
Yukarıdaki örnek kodu içeren .ino dosyası:
PT6523/examples/Text/Text.ino
Bu fonksiyon ile ekran üzerinde bulunan sembolleri gösterebilir ve gizleyebilirsiniz. Lcd panel üzerindeki tüm sembollere karşılık gelen birer enum
sabiti tanımlanmıştır. Symbol
isimli bu enum
sabitlerinden birini ve içereceği durumu (true
veya 1
= göster, false
veya 0
= gizle) bu fonksiyona parametre olarak girerek, ilgili sembolün görünürlüğünü değiştirebilirsiniz.
void loop()
{
// Sembol durum bilgisi true girilerek semboller gösteriliyor.
boolean sts = true;
lcd.symbol(MUSIC, sts);
lcd.symbol(MUTE, sts);
lcd.symbol(BLUETOOTH, sts);
delay(1500);
// Sembol durum bilgisi 0 girilerek semboller gizleniyor.
byte bsts = 0;
lcd.symbol(MUSIC, bsts);
lcd.symbol(MUTE, bsts);
lcd.symbol(BLUETOOTH, bsts);
}
Yukarıdaki örnek kodu içeren .ino dosyası:
PT6523/examples/Symbols/Symbols.ino
Tüm sembol sabitleri aşağıda verilmiştir.
INT,
MUTE,
BLUETOOTH,
TRACK,
DISC,
RDM,
RPT,
MP3,
FOLDER_ICON,
MUSIC,
AUDIO_FILE_ICON,
BOOK_ICON,
LOUD,
PERSON_ICON,
CD_ICON,
PTY,
AF,
DOT,
EON,
TA,
TP,
EQ,
POP,
FLAT,
EQ_BORDER,
ROCK,
CLAS,
CHART_DOT,
CHART_1,
CHART_2,
CHART_3,
VOLUME_1,
VOLUME_2,
VOLUME_3,
VOLUME_4,
VOLUME_5,
VOLUME_6,
VOLUME_7
'Volume seviyesi' ve 'chart' gösterimi gibi, sıralı ve birbiri ile bağlantılı bazı sembollerin kontrolü için kullanılır. symbol()
fonksiyonuyla da müdahale edilebilen VOLUME_*
ve CHART_*
sembollerinin durumu, bu fonksiyon ile sıralı int
değerler girilerek değiştirilebilir. Böylece bu sembolleri bir döngü içinde sıralı işlemlerde kullanabilirsiniz.
void loop()
{
// VOLUME_1 sembolünü göster.
lcd.volumeChart(1, true);
// VOLUME_2 sembolünü göster.
lcd.volumeChart(2, true);
// CHART_1 sembolünü göster.
lcd.volumeChart(9, true);
// VOLUME_2 sembolünü gizle.
lcd.volumeChart(2, false);
}
Volume ve chart sembollerinin fonksiyon içindeki sıralaması aşağıda verilmiştir.
1: // VOLUME_1
2: // VOLUME_2
3: // VOLUME_3
4: // VOLUME_4
5: // VOLUME_5
6: // VOLUME_6
7: // VOLUME_7
8: // CHART_DOT
9: // CHART_1
10: // CHART_2
11: // CHART_3
Volume seviyesini istenen konuma getirir. Toplamda 7 basamaklı volume sembolünü ayarlayabilirsiniz. Bu seviye sembollerini döngüye girmeden bir seferde istenilen seviyeye getirmek için bu fonksiyonu kullanabilirsiniz. Örneğin seviyeyi 5. düzeye getirmek için volumeLevel(3)
komutunu kullanmak yeterli.
void loop()
{
lcd.volumeLevel(3);
lcd.volumeLevel(7);
}
Seviye basamakları toplam 7 farklı segmentten oluşuyor. Varsayılan olarak en düşük seviye 0
, en yüksek seviye ise 7
kabul edilmiştir. Ancak bu değerleri volumeStartValue()
, ve volumeEndValue()
fonksiyonları ile düzenleyebilirsiniz.
Seviye aralığı olarak 7 birimin yetmediği durumlarda, bu fonksiyonlar ile başlangıç ve bitiş değerleri ayarlanabilir. Örneğin aşağıdaki örnekte, Arduino A0
nolu analog pinine uygulanan voltajın (max. 5 v.) yaklaşık değeri, seviye simgeleri üzerinde gösterilmiştir. Arduino analog girişten gelen voltaj değerini 0 - 1023 arası bir değere çevirmektedir. Ancak bu değer standart seviye sınırı olan yediyi aştığı için, yedinin üzerindeki her veri seviyeyi en sona taşır. Bu durumu düzeltmek için, alt ve üst seviye sınırlarını bu iki fonksiyonla bildirebilirsiniz.
Program boyunca bu ayarı değiştirme ihtiyacı duyulmuyorsa, setup()
fonksiyonu içinde tanımlayınız.
void setup()
{
lcd.begin(10, 130);
lcd.volumeStartValue(0);
lcd.volumeEndValue(1023);
int val = 0;
}
void loop()
{
val = analogRead(0);
lcd.volumeLevel(val);
}
Yukarıdaki örnek kodu içeren .ino dosyası:
PT6523/examples/Voltage_Level/Voltage_Level.ino
Seviye animasyonunun hareket yönünü ayarlamanızı sağlar. Fonksiyona girelebileceğiniz toplam iki yön bulunuyor.
IN
OUT
Animasyonun, volume arttıkça içe doğru çoğalması için, fonksiyonu aşağıdaki gibi kullanın.
void loop()
{
levelDirection(IN);
}
setup()
fonksiyonu içinde, başlangıçta bir defa tanımlamanız yeterli olacaktır. Öntanımlı değer olarak OUT
ayarlıdır.
Chart sembollerinin, dönme animasyonu için kullanılır. Fonksiyona true
veya 1
değeri girildiği sürece, chart sembolleri üzerinde dönüş animasyonu oluşturur.
void loop()
{
for (int j = 0; j <= 8; j++)
{
lcd.sChart(1);
}
}
Yukarıdaki örnek kodu içeren .ino dosyası:
PT6523/examples/Symbols/Smbols.ino
Ekrandaki animasyonların (metin kaydırma, seviye geçişleri, chart animasyonu vb.) hızını belirlemek için kullanılır. Uygulamanın herhangi bir noktasında kullanılabilir. int
tipindeki parametre milisaniye cinsinden olmalıdır. Belirtilen süre animasyonun geçiş hızını belirler. Dolayısıyla süre ne kadar az ise, animasyonlar o kadar hızlı gösterilir. Hiç bir değer belirtilmemişse, varsayılan değer 300 milisaniye olarak uygulanır.
Ekranda o anda yazılı olan karakterleri siler. Metinler arası geçişlerde kullanıldığında, metinlerin iç içe geçme riskini engeller. Her yeni metni ekrana yazdırmadan önce kullanmanız gerekiyor.
clear()
fonksiyonuna ek olarak, textLoopCount()
ile tutulan metin döngü sayısını, ekrandaki tüm sembolleri, sol ve sağ seviye bilgilerini sıfırlar. Animasyon hızını başlangıç değeri olan 300 milisaniyeye ayarlar. Ekran güç tasarrufu (power saving) modunda ise açılacaktır. Ancak volumeStartValue()
ve volumeEndValue()
ile belirlenen seviye aralıklarını değiştirmez.
Sürücü güç tasarrufu (power saving) moduna geçer. Sürücü içindeki osilatör duracağı ve segment hatlarındaki voltaj Vss değerine çekileceği için, ekran lcd bölümü kapanır. Ekranın batarya ile çalıştırılacağı durumlarda, belirli bir süre sonunda bu moda geçilebilir.
Güç tasarrufu (power saving) modunda bulunan sürücüyü normal çalışma moduna geçirir.