GitHub sayfasının sağ sütunundaki “Download ZIP” butonuna tıklayarak ZIP dosyası olarak indiriniz.
Arduino yazılımındaki Sketch > Import Library > Add Library… menüsünden, indirdiğiniz zip dosyalarını seçerek kütüphaneleri Arduino derleyicisine ekleyebilirsiniz.
GFX kütüphanesinin kullanım klavuzu için aşağıdaki PDF dosyasını inceleyin:
Termometre kodlarını aşağıda sizlerle paylaşıyorum. Kod satırlarında gerekli açıklamarı yapmaya çalıştım. Deneme yanılma yöntemiyle de keşfetmeniz mümkün. Termometremiz 0 ile 99 santigrad derece arasını ölçebiliyor. İsterseniz kodlar üzerinde biraz oynamalar yapıp -40 ile +150 santigrad derece arasında ölçüm yapabilirsiniz. LCD küçük olduğundan ben 0-99 derece arasını tercih ettim.
/**
* @file Esplora_Termometre.ino
* @author Ercan ÇAĞLAYAN (ercancag@engineer.com)
* @date Haziran, 2015
* @brief Arduino Esplora ile Termometre.
*
* Arduino Esplora + TFT LCD ile Adafruit kütüphaneleri kullanılarak
* yapılmış şık bir termometre.
* www.ercancag.blogspot.com
*/
#include <Esplora.h>// Esplora hazır fonksiyonlarını kullanmak için
#include <Adafruit_GFX.h>// Çekirdek grafik kütüphanemizi dahil edelim
#include <Adafruit_ST7735.h>// Esplora LCD'sinin sürücüsünü dahil edelim
#include <SPI.h>// Esplora LCD'sini SPI haberleşme kullanarak daha hızlı
// kullanmak için SPI.h dosyasını dahil edelim
// Esplora LCD'sinin pin bağlantılarını ayarlıyoruz
#define sclk 15 // Arduino'nun 15. pini: SCK clock pini
#define mosi 16 // Arduino'nun 16. pini: Master Output Slave Input (MOSI) data pini
#define cs 7
#define dc 0
#define rst 1
// RGB565CONVERT fonksiyonu 32 bit rgb renk kodunu 16 bit rgb renk koduna cevirir
// Photoshop, Adobe Fireworks gibi tasarım programları 32bit rgb renk kodları ile çalışır.
// Parlak kırmızı renk kodu bilgisayarda #FF3300 iken, bunu 16 bit renk koduna çevirmek
// için RGB565CONVERT fonksiyonundan geçirmeliyiz: RGB565CONVERT(0xFF, 0x33, 0x00)
#define RGB565CONVERT(red, green, blue)\
(uint16_t)((( red >> 3 )<< 11 )| \
(( green >> 2 )<< 5 )| \
( blue >> 3 ))
// renk tanımlamalarımız
#define kirmizi RGB565CONVERT(0xFF, 0x33, 0x00)// parlak kırmızı
#define gri RGB565CONVERT(0xCC, 0xCA, 0xCF)
#define koyu_gri RGB565CONVERT(127, 127, 135)
#define yesil RGB565CONVERT(0x66, 0xcc, 0x00)// parlak yesil
#define sari RGB565CONVERT(0xFF, 0xFF, 0x00)// sari
#define siyah 0
// Seçenek 1: herhangi bir giriş-çıkış pinini kullanarak LCD ile haberleşebiliriz.
// ama bu biraz yavaş olacak.
//Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);
// Seçenek 2: SPI donanım pinlerini kullanarak LCD ile haberleşelim.
// İşte bu LCD'yi kullanmanın en hızlı yolu!
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);
int celsius = 0;
int old_celsius=0;
long previousMillis = 0;
void setup(void) {
// Eğer LCD'niz düzgün çalışmıyorsa aşağıdaki farklı tanımlamaları deneyin.
// If your TFT's plastic wrap has a Black Tab, use the following:
tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab
// If your TFT's plastic wrap has a Red Tab, use the following:
//tft.initR(INITR_REDTAB); // initialize a ST7735R chip, red tab
// If your TFT's plastic wrap has a Green Tab, use the following:
//tft.initR(INITR_GREENTAB); // initialize a ST7735R chip, green tab
// LCD'yi yatay kullan
tft.setRotation(1);
// LCD'yi siyah renkle doldur
tft.fillScreen(siyah);
tft.setCursor(10, 5); // imleci X:10, Y:5 koordinatlarına getir
tft.setTextSize(2); // yazı boyutunu 2 yap
tft.println("Termo"); // Önceden ayarladığımız koordinatlara Termo yaz
tft.setCursor(14, 18); // imleci X:14, Y:18 koordinatlarına getir
tft.println("metre"); // metre yaz
// termometre gövdemizi çiziyoruz
tft.drawRoundRect(130, 4, 10, 10, 5, gri);
tft.drawRoundRect(125, 104, 20, 20, 10, gri);
tft.drawRect(130, 9, 10, 100, gri);
tft.fillRect(131, 10, 8, 4, siyah);
tft.fillRect(131, 104, 8, 4, siyah);
tft.fillRoundRect(131, 5, 8, 8, 4, siyah);
tft.fillRoundRect(126, 105, 18, 18, 9, siyah);
tft.fillRoundRect(127, 106, 16, 16, 8, kirmizi);
// termometre çizgilerini ve 0'dan 100'e kadar sayıları yazıyoruz
// yazı boyutlarını küçük olarak ayarla
tft.setTextSize(1);
for( int i=0; i<11; i++ ) {
switch( i ) {
case 0: // Eğer 100'ü yazıyorsan biraz sola yaz
tft.setCursor(98, (i*10)+3);
break;
case 10: // Eğer 0'ı yazıyorsan biraz sağa yaz
tft.setCursor(108, (i*10)+3);
break;
default: // diğerlerini bu hizada yaz
tft.setCursor(103, (i*10)+3);
}
// yazılarda mavi'den kırmızıya geçiş efekti
tft.setTextColor(RGB565CONVERT(map(i,0,10,255,0), 55, map(i,0,10,0,255)));
// çizgi yazılarını yaz
tft.println(100-(i*10));
// çizgileri çiz
tft.drawLine(120, (i*10)+6, 125, (i*10)+6, yesil);
}
// derece yazdığımız alanın köşeleri yuvarlatılmış gri ile doldurulması
tft.fillRoundRect(10, 44, 80, 34, 4, koyu_gri);
// başlangıçta 00°C yaz
tft.setCursor(16,50);
tft.setTextSize(3);
tft.setTextColor(gri);
tft.print("00");
tft.print("\xF7");
tft.print("C");
tft.setCursor(4,116);
tft.setTextSize(1);
tft.setTextColor(gri);
tft.print("\x41\x72\x64\x75\x69\x6e\x6f\x54\x75\x72\x6b\x69\x79\x65\x2e\x63\x6f\x6d");
// bundan sonraki yazıların boyutunu 3 ve rengini sari olarak ayarla
tft.setTextSize(3);
tft.setTextColor(sari);
}
void loop() {
unsigned long currentMillis = millis();
// Yarım saniyede bir sıcaklık oku
if(currentMillis - previousMillis > 500) {
previousMillis = currentMillis;
celsius = Esplora.readTemperature(DEGREES_C);
if( celsius > 99 ) {
celsius = 99;
}
if( celsius < 0 ) {
celsius = 0;
}
}
// eğer sıcaklık değişmişse
if( celsius != old_celsius ) {
// Derece değerini yazacağımız yeri önce koyu gri ile temizliyoruz
tft.fillRect(16, 50, 34, 22, koyu_gri);
// Derece değerini yaz
tft.setCursor(16,50);
tft.print(celsius);
// termometre barını güncelle
tft.fillRect(132, 102-(celsius), 6, 4, siyah);
tft.fillRect(132, 106-(celsius), 6, celsius, kirmizi);
old_celsius = celsius;
}
}