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();

  }


PROGRAM DOSYALARINI İNDİRİN

KULLANILAN PROGRAMLAR: Arduino 1.8.12

KULLANILAN PROGRAMLAYICI: ARduino Uno (Klon)







Yorumlar