Ders -25 arduino ile dijital saat yapımı

Arkadaşlar merhaba bu günki uygulamamız 4x4x4 dot matrix kullanarak dijital saat uygulaması yapacağız aynı zamanda rtc gerçek zaman saat modülü kullanarak arduinomuzu kapatıp açsak bile saatimizin sıfırlanmaması kapalı iken bile arka planda rtc gerçek zaman saat modülü ile saati canlı tutmaya devam etmesini sağlayacağız ama bunun için mutlaka CR2032 pil almamız gerekmektedir

ÖNCELİKLE KÜTÜPHANELERİ İNDRİYORUZ

bu pil sayesinde saatimize yaptığımız ayar kaybolmayacak

şemaya göre bağlantımızı yapalım

#include <MD_Parola.h>
#include <MD_MAX72XX.h>
#include <SPI.h>
#include <ThreeWire.h>
#include <RtcDS1302.h>

// MAX7219 ayarları
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CS_PIN 4

MD_Parola display = MD_Parola(HARDWARE_TYPE, 3, 5, 4, MAX_DEVICES);
// DIN=3, CLK=5, CS=4

// DS1302 ayarları
ThreeWire myWire(8, 6, 7); // DAT, CLK, RST
RtcDS1302<ThreeWire> Rtc(myWire);

// İki nokta yanıp sönme
bool noktaGoster = true;
unsigned long oncekiMillis = 0;

char saatBuffer[10];

void setup() {
  Serial.begin(9600);

  // MAX7219 başlat
  display.begin();
  display.setIntensity(8);
  display.displayClear();
  display.setTextAlignment(PA_CENTER);

  // DS1302 başlat
  Rtc.Begin();

  // Eğer RTC durmuşsa zamanı ayarla
  if (!Rtc.IsDateTimeValid()) {
    Serial.println("RTC gecersiz, zaman ayarlaniyor...");
    Rtc.SetDateTime(RtcDateTime(__DATE__, __TIME__));
  }

  if (Rtc.GetIsWriteProtected()) {
    Rtc.SetIsWriteProtected(false);
  }

  if (!Rtc.GetIsRunning()) {
    Rtc.SetIsRunning(true);
  }

  Serial.println("Hazir!");
  Serial.println("Saat ayarlamak icin: HHMM (ornek: 1430)");
}

void loop() {
  unsigned long simdi = millis();

  // Her 500ms'de bir iki nokta yanıp sönsün
  if (simdi - oncekiMillis >= 500) {
    oncekiMillis = simdi;
    noktaGoster = !noktaGoster;

    // DS1302'den zamanı oku
    RtcDateTime now = Rtc.GetDateTime();

    int s = now.Hour();
    int d = now.Minute();

    // HH:MM formatı
    if (noktaGoster) {
      sprintf(saatBuffer, "%02d:%02d", s, d);
    } else {
      sprintf(saatBuffer, "%02d %02d", s, d);
    }

    display.setTextAlignment(PA_CENTER);
    display.print(saatBuffer);

    // Serial monitöre de yaz
    Serial.print(s < 10 ? "0" : ""); Serial.print(s);
    Serial.print(":");
    Serial.print(d < 10 ? "0" : ""); Serial.print(d);
    Serial.print(":");
    Serial.println(now.Second() < 10 ? "0" : ""); 
  }

  // Serial'dan saat ayarı (HHMM formatı, örn: 1430)
  if (Serial.available() >= 4) {
    String girdi = Serial.readStringUntil('\n');
    girdi.trim();
    if (girdi.length() == 4) {
      int yeniSaat = girdi.substring(0, 2).toInt();
      int yeniDakika = girdi.substring(2, 4).toInt();
      if (yeniSaat >= 0 && yeniSaat < 24 && yeniDakika >= 0 && yeniDakika < 60) {
        RtcDateTime yeniZaman(2024, 1, 1, yeniSaat, yeniDakika, 0);
        Rtc.SetDateTime(yeniZaman);
        Serial.print("Saat ayarlandi: ");
        Serial.print(yeniSaat);
        Serial.print(":");
        Serial.println(yeniDakika);
      }
    }
  }
}

ilgili kütüphaneleri indirip kurmayı unutmayın kodun en başında hangi kütüphane lazım var bakıp IDE nin içinde olanları zaten seçili gelir olmayan hata verenleri ya IDE nin içinden bulup kurup indirin ya da internetten farklı yerlerden bulup indirin kolay gelsin….