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
ThreeWire.h ve RtcDS1302.h ortak kütüphanesi için TIKLAYINIZ
MD_Parola.h kütüphanesi için TIKLAYINIZ
MD_MAX72XX.h kütüphanesi için TIKLAYINIZ

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….
