#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <RTClib.h>
// Definisi pin MAX7219
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW // Pastikan menggunakan tipe
#define MAX_DEVICES 4 // Jumlah modul dot matrix (2x 8x8 matrix)
#define CS_PIN 10 // Pin CS pada Arduino
MD_Parola display = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
// Inisialisasi RTC
RTC_DS3231 rtc;
char buf[20]; // Buffer untuk menampung waktu
void setup() {
// Inisialisasi komunikasi serial
Serial.begin(9600);
// Inisialisasi display
display.begin();
display.setIntensity(10); // Atur kecerahan (0-15)
display.displayClear();
// Atur zona dan orientasi display
display.setZone(0, 0, MAX_DEVICES - 1); // Mengatur zona display agar semua modul digunakan
display.setTextAlignment(PA_LEFT); // Menampilkan teks dari kiri ke kanan
display.setInvert(false); // Menonaktifkan mode mirror teks
// Inisialisasi RTC
if (!rtc.begin()) {
Serial.println("RTC tidak ditemukan!");
while (1);
}
// Cek apakah RTC kehilangan daya
if (rtc.lostPower()) {
Serial.println("RTC kehilangan daya, mengatur ulang waktu!");
// Set waktu ke tanggal dan waktu saat ini (bisa diatur ke waktu saat kode diunggah)
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// Set animasi pada display
display.setSpeed(100); // Atur kecepatan animasi
display.displayClear(); // Bersihkan layar
}
void loop() {
static bool showName = true;
DateTime now = rtc.now(); // Ambil waktu saat ini dari RTC
if (display.displayAnimate()) {
if (showName) {
// Tampilkan nama dengan scrolling
display.displayText("Hidayat Zain Wabula", PA_LEFT, 50, 5000, PA_SCROLL_LEFT);
delay(0);
showName = false;
} else {
// Tampilkan jam digital
sprintf(buf, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
display.displayText(buf, PA_LEFT, 50, 10000, PA_SCROLL_LEFT);
delay(0);
showName = true;
}
}
}