Arduino Büyük Fontlu Saat
Arduino Uno, 16x2 I2C_LCD, DS1302 RTC kullanarak büyük fontlu saat yapmaya karar verdim, Ne de olsa 16x2 LCD ekranda tek satır uzaktan seçilmiyor.
Öncelikle büyük font için kütüphane aradım ve tam da aradığım gibi iki satır yüksekliğinde rakamları içeren bir kütüphane çalışması buldum. Kaynak kodun bulunduğu link: https://github.com/seanauff/BigNumbers burası. Buradaki uygulama birer saniye aralıklarla sayıp sonucu LCD'ye yazdırıyor, ayrıca normal 16x2LCD ye göre düzenlenmiş. Ben I2C modüllü 2x16 LCD kullandığım için öncelikle BigNumbers.h ve BigNumbers.cpp kütüphane dosyaları içinde I2C_LCD ye göre düzenleme yaptım. Orijinal dosyalar ile benimkileri karşılaştırıp yaptığım değişiklikleri inceleyebilirsiniz. Daha sonra da LCD için LiquidCrystal_I2C.h ve DS1302 için Wire.h ve virtuabotixRTC.h kütüphanelerini ekledim.
Program kodları içinde yazmış olmama rağmen takvim bilgisini göstermiyorum, yalnızca saat bilgisini kullanıyorum. Arzu ederseniz kodları kendinize göre ayarlayabilirsiniz. Tek basamaklı saat, dakika ve saniye bilgilerinin iki basamaklı gösterilmesi için 10'dan küçükse soluna bir tane sıfır ekledim basit bir if kontrolü ile.
Programı yüklerken:
//zamanRTC.setDS1302Time(00, 20, 21, 7, 13, 12, 2020);
satırının başındaki // yorum işaretlerini silip, parantez içindeki zaman bilgilerini de düzeltip) ilk yüklemenizde zamanı set ettirin. Sonra bu satırı // işareti ile yorum satırı haline getirip, tekrar yazılımı yükleyin. Bu işlemi yapmazsanız, cihaza her enerji verdiğinizde parantez içindeki zaman bilgisi ile başlar. Bu bilgiyi özellikle yeni başlayan arkadaşlar için yazıyorum.
Bağlantılar:
ds1302 bağlantı noktaları: clk=>4 , dat=>3, rst=>2
I2C_LCD bağlantı noktaları: SCL=>A5, SDA=>A4
Aşağıdaki resimde bağlantıları gösterdim.
Bütün program ve kütüphane dosyalarına yazının altındaki linkten ulaşabilirsiniz.
Program kodları (Big_font_watch.ino dosyası içeriği):
/*
* BIG NUMBERS BIG NUMBERS BIG NUMBERS BIG NUMBERS BIG NUMBERS BIG NUMBERS
* I2C LCD
* ARDUINO UNO
* DS1302 RTC MODULE
*
* orijinal dosyalar: https://github.com/seanauff/BigNumbers adresindedir.
*
*/
#include "BigNumbers.h" // LiquidCrystal_I2C için düzenledim
#include <LiquidCrystal_I2C.h> //I2C modüllü 16x2 lcd kütüphanesi
#include <Wire.h>
#include <virtuabotixRTC.h> // ds1302 için kütüphane
virtuabotixRTC zamanRTC(4, 3, 2); //ds1302 bağlantı noktaları: 4 clk,3 dat,2 rst
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);
BigNumbers bigNum(&lcd);
int a=0; // 10 saniyede bir tarih göstermek için kullandığım sayaç
void setup()
{
lcd.begin(16,2); // setup LCD rows and columns
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH);
lcd.setCursor(0, 0);
bigNum.begin(); // set up BigNumbers
lcd.clear(); // clear display
//zamanRTC.setDS1302Time(00, 20, 21, 7, 13, 12, 2020);
// (sec,min,hr,weekday,day,month,year)
}
void loop()
{
zamanRTC.updateTime();
int currentTime1=zamanRTC.hours;
int currentTime2=zamanRTC.minutes;
int lastDigit=zamanRTC.seconds;
if (currentTime1<10){
bigNum.displayLargeInt(0, 0, 1, false);
}
bigNum.displayLargeInt(currentTime1, 0, 2, false);
lcd.print(":");
if (currentTime2<10){
bigNum.displayLargeInt(0, -5, 5, false);
}
bigNum.displayLargeInt(currentTime2, -2, 5, false);
lcd.print(" ");
if(lastDigit<10){lcd.print("0");}
lcd.print(lastDigit);
delay( 1000);
a=a+1;
if (a==10) // 10 saniyede bir tarih göstersin
{
a=1;
// tarih();
}
}
void tarih(){ // burası düz modda, büyük karakter kullanmıyor
// 10 saniyede bir, bir saniye süreyle tarih gösteriyor
lcd.clear();
lcd.setCursor(0, 0); // LCD 1.SATIR------------------------------------------
lcd.print(zamanRTC.hours); //saat
lcd.print(":");
lcd.print(zamanRTC.minutes); //dakika
lcd.print(":");
lcd.print(zamanRTC.seconds); //saniye
lcd.print(" ");
lcd.setCursor(0, 1); // LCD 2.SATIR-----------------------------------------
lcd.print(zamanRTC.dayofmonth); //ayın günü
lcd.print(".");
//lcd.print(zamanRTC.month); // kaçıncı ay olduğunu yazıyor
switch (zamanRTC.month){ // ay isimlerini yazdıralım
case 1: lcd.print("Oca");break;
case 2: lcd.print("Sub");break;
case 3: lcd.print("Mar");break;
case 4: lcd.print("Nis");break;
case 5: lcd.print("May");break;
case 6: lcd.print("Haz");break;
case 7: lcd.print("Tem");break;
case 8: lcd.print("Agu");break;
case 9: lcd.print("Eyl");break;
case 10: lcd.print("Eki");break;
case 11: lcd.print("Kas");break;
case 12: lcd.print("Ara");break;
}
lcd.print(".");
lcd.print(zamanRTC.year); //yıl
lcd.print(" ");
// haftanın gününe göre gün isimlerini yazdırıyoruz
//lcd.print(zamanRTC.dayofweek); //haftanın kaçıncı günü olduğunu yazdırıyor
switch(zamanRTC.dayofweek) //haftanın gününün adını yazdıralım
{ case 1: lcd.print("pts");break;
case 2: lcd.print("sal");break;
case 3: lcd.print("crs");break;
case 4: lcd.print("prs");break;
case 5: lcd.print("cum");break;
case 6: lcd.print("cts");break;
case 7: lcd.print("paz");break;
}
lcd.print(" ");
//-------------------------LCD YAZDIRMA BİTTİ--------------------------------
delay( 1000); // görüntünün tazelenmesi için 1 saniye bekletiyoruz.
lcd.clear();
}
KULLANILAN PROGRAMLAR: Arduino 1.8.12
KULLANILAN PROGRAMLAYICI: ARduino Uno (Klon)
Yorumlar
Yorum Gönder