Arduino, DHT11, 5110 ile Alarmlı Dijital Saat #2

Selamlar maker dostlarım. Kendi dijital saatimizi yaptığımız bu seride daha önce saatin bağlantı ve kodlarını paylaşmıştım. Şimdi ise kodları satır satır inceleyeceğiz. Hadi başlayalım…

Öncelikle kütüphaneleri eklediğimiz kısıma bakalım;

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <virtuabotixRTC.h>
#include <DHT.h>

Adafruit_PCD8544 lcd = Adafruit_PCD8544(8 /*CLK*/, 9 /*DIN*/, 10 /*DC*/, 12 /*CE*/, 11 /*RST*/);

virtuabotixRTC myRTC(5 /*CLK_PIN*/, 6 /*DAT_PIN*/, 7 /*RST_PIN*/ );

DHT dht(2 /*pin no*/ , DHT11 /*sensortipi*/ );

-İlk dört satırda kullanacağımız kütüphaneleri yazdık. Kütüphane linkleri bir önceki yazımda bulunmaktadır. Ardından kütüphaneler için gerekli pin tanımlamalarını yaptık. Pinleri nerelere bağlanacağını kolaylık olsun diye yorum satırı içinde sizlere tanıttım. “DHT11” yazan kısmı isterseniz sensörünüze göre DHT21 veya DHT22 yazarak elinizdeki sensöre göre değiştirebilirsiniz.

#define ap 4  //Alarm Sesi Cikaran Pini
#define ep 3  //Ekran Parlakligi Pini
#define dp 13 //Durum Ledi Pini

#define ana 200
#define men 100 //delay süresi
#define ara 50

#define saat 8
#define yil 16  // satirlar
#define bli 0

#define ap0 A0
#define ap1 A1
#define ap2 A2

#define bas 900

int a0;
int a1;
int a2;

int n; //DHT değişkenleri
int s;

int dy;
int g = 0; //alarm çalma durdurma
int gn;

int olc = 0;
int k = 0;

int sa = 13;  //alarm ekranı değişkenleri
int dk = 20;

int mod = 0;
int alr = 0;

int im; //alarm ekranı imleci

boolean al = 1;

String bel;
String gun[] = {"!?!", "Pazartesi", "Sali", "Carsamba", "Persembe", "Cuma", "Cumartesi", "Pazar"};
String is;
String ht;

String m1;
String m2;  //buton görevi yazan değişkenler
String m3;

-Burada kullanacağımız bütün değişkenleri tanımladım. Pinlerden delayın içine yazacağımız süreye kadar hepsi burada bulunmaktadır. Bu kadar değişken sizleri korkutmasın çalışmasını etkilememektedir. “gun[]” değişkeni RTC kütüphanesinin günleri sayı olarak yazmasıdır. O yüzden liste biçiminde yazdım. Ayrıca “!?!” şeklinde yazma sebebim onu değerinin sıfır olması dolayısıyla sıfır diye bir günde olmadığı için boş bırakmamak adına orayı o şekilde yazmamdır. Delay sürelerini isteğe göre değiştirebilirsiniz.

void setup() {

  pinMode(ap, OUTPUT);
  pinMode(ep, OUTPUT);
  pinMode(dp, OUTPUT);
  digitalWrite(ep, 1);
  lcd.begin();
  lcd.setContrast(50);
  lcd.setTextSize(1);
  lcd.setTextColor(BLACK);
  dht.begin();
  lcd.setCursor(78, 0);
  lcd.println("SELAM");
  delay(1000);

  //myRTC.setDS1302Time(20, 46, 17, 1, 22, 12, 2019);

}

-Setup kısmında gerekli ayarları yaptık. Buradaki yorum satırı içindeki komutu saatin ayarlanması içindir. Sırasıyla; saniye, dakika, saat, haftanın günü (Haftanın günü numara ile), ayın günü, ay, yıl şeklindedir. Yorum satırında olması onu sadece saatin ayarı yapılacakken komut aktif edilir. Saat tarih ayarı yapıldıktan tekrar kodu o satırı ya yorum satırı yaparız ya da siz direk o satırı silersiniz. Kodu tekrar yüklemeyi unutmayın.

void calma() {
  digitalWrite(ap, 1);
  digitalWrite(dp, 1);
  delay(200);
  digitalWrite(ap, 0);
  digitalWrite(dp, 0);
  delay(50);
  digitalWrite(ap, 1);
  digitalWrite(dp, 1);
  delay(200);
  digitalWrite(ap, 0);
  digitalWrite(dp, 0);
  delay(50);
}

-Bu fonksiyonu ekleme sebebim buzzer ve led’in alarm sırasında çalışmasına rağmen birkaç yerde kullanma ihtiyacı duymamdır. İsterseniz melodi hazırlayabilirsiniz.

void testdrawline() {
  lcd.clearDisplay();
  delay(100);
  for (int16_t i = 0; i < lcd.width(); i += 4) {
    lcd.drawLine(0, 0, i, lcd.height() - 1, BLACK);
    lcd.display();
  }
  for (int16_t i = 0; i < lcd.height(); i += 4) {
    lcd.drawLine(0, 0, lcd.width() - 1, i, BLACK);
    lcd.display();
  }
  delay(450);
  lcd.clearDisplay();
  for (int16_t i = 0; i < lcd.width(); i += 4) {
    lcd.drawLine(0, lcd.height() - 1, i, 0, BLACK);
    lcd.display();
  }
  for (int8_t i = lcd.height() - 1; i >= 0; i -= 4) {
    lcd.drawLine(0, lcd.height() - 1, lcd.width() - 1, i, BLACK);
    lcd.display();
  }
  delay(450);
  lcd.clearDisplay();
  lcd.setCursor(0, 0);
  lcd.print(k);
  for (int16_t i = lcd.width() - 1; i >= 0; i -= 4) {
    lcd.drawLine(lcd.width() - 1, lcd.height() - 1, i, 0, BLACK);
    lcd.display();
  }
  for (int16_t i = lcd.height() - 1; i >= 0; i -= 4) {
    lcd.drawLine(lcd.width() - 1, lcd.height() - 1, 0, i, BLACK);
    lcd.display();
  }
  delay(450);
  lcd.clearDisplay();
  delay(200);
  for (int16_t i = 0; i < lcd.height(); i += 4) {
    lcd.drawLine(lcd.width() - 1, 0, 0, i, BLACK);
    lcd.display();
  }
  for (int16_t i = 0; i < lcd.width(); i += 4) {
    lcd.drawLine(lcd.width() - 1, 0, i, lcd.height() - 1, BLACK);
    lcd.display();
  }
  delay(450);
}

-Bu bir animasyondur. Bunu Adafruit’in içindeki örnekten aldım çünkü hoşuma gitti. Çalıştırmak için üç butonun hepsine aynı anda basmanız lazım. Küçük bir easter egg ekledim. İsterseniz kaldırabilirsiniz. Çalışırken sol üstte sayaç çıkacaktır. Sayaç 6 oluncaya kadar çalışacaktır.

void buton() {
  a0 = 0;
  a1 = 0;
  a2 = 0;
  delay(men);
  a0 = analogRead(ap0);
  a1 = analogRead(ap1);
  a2 = analogRead(ap2);
}

-Buton okuma işlemleri her yerde aynı olduğu için fonksiyon olarak tanımladım. Aradaki süre butonu arka arkaya basmayı önlemek içindir.

void alarmekran() {
  lcd.clearDisplay();
  lcd.setCursor(78, 0);
  lcd.println(bel);
  lcd.setCursor(24, 16);
  lcd.println(sa);
  lcd.setCursor(36, 16);
  lcd.println(".");
  lcd.setCursor(42, 16);
  lcd.println(dk);
  lcd.setCursor(im, 24);
  lcd.println(ht);
  lcd.setCursor(0, 40);
  lcd.println(m1);
  lcd.setCursor(32, 40);
  lcd.println(m2);
  lcd.setCursor(66, 40);
  lcd.println(m3);
  lcd.display();
}

-Alarm modun da ki ekrana yazı yazma kısmı aynı olduğu için fonksiyon olarak tanımladım. Ekrandaki yazılar string değişkeni ile değişmektedir.

Bu yazımızda void loop kısmından önceki kısmı inceledik. Umarım yazımızı beğenmişsinizdir. Sonraki yazımızda arayüz kısmını inceleyeceğiz. Eğer isterseniz projenin tam kodlarını https://s2.dosya.tc/server12/pbxeza/MasaSaati.rar.html linkinden indirebilirsiniz. Oluşan hatalar için mail adresimden bana ulaşabilirsiniz. İyi okumalar dilerim.

2 thoughts on “Arduino, DHT11, 5110 ile Alarmlı Dijital Saat #2

  1. Merhaba emeğiniz için teşekkürler.
    Kullanılan görseller anlatılan olayın gerçek ve kendi görseli olsa daha güzel olacak.

    Yazılarınızın devamını bekliyoru.

  2. merhaba bunu ben de denedim çok güzel ve kullanışlı oldu elinize emeğinize sağlık. Yeni çalışmalarınızı sabırsızlıkla bekliyorum.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir