#include "RTClib.h"
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX_DEVICES 4
#define CS_PIN 5
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
RTC_DS3231 rtc;
String dot = " ";
//Array nama hari dan nama bulan
char namaHari[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"};
char namaBulan[12][15] = {"Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli",
"Agustus", "September", "Oktober", "November", "Desember"};
//mendeklarasikan char arr_tanggal
//digunakan untuk menghitung display tanggal tiap satuan pada kalimat.
char arr_tanggal[25]; // Rabu, 11 April 2022
//deklarasi variabel counter
int counter = 0;
//deklarasi variabel menentukan posisi jam dan tanggal
String posisi = "sttanggal";
void setup() {
//untuk mengaktifkan rtc
rtc.begin();
//Mengaktifkan display
myDisplay.begin();
//Setup untuk led matrix
myDisplay.setIntensity(0);
myDisplay.displayClear();
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
//baca_jam();
//baca_tanggal();
//uji posisi yang ditampilkan
if(posisi=="sttanggal"){
baca_tanggal();
}else if(posisi=="stjam"){
baca_jam();
}
}
void baca_tanggal() {
DateTime now = rtc.now();
//membuat hari, bulan, tanggal_sekarang dengan tipe data string
String hari, bulan, tanggal_sekarang;
// membuat tanggal dan tahun dengan tipe data integer
int tanggal, tahun;
//--hari--//
hari = String (namaHari[now.dayOfTheWeek()]);
//--tanggal--//
tanggal = now.day();
//menambahkan 0 jika tanggal kurang dari 10
String sTanggal="";
if (tanggal < 10){
sTanggal = "0" + String(tanggal);
}else{
sTanggal = String(tanggal);
}
//--bulan--//
// -1 untuk menyesuaikan array dari 0
bulan = String (namaBulan[now.month() - 1]);
//--tahun--//
tahun = now.year();
//menggabungkan hari, tanggal, bulan dan tahun menjadi satu variabel
tanggal_sekarang = hari + "," + sTanggal + " " + bulan + " " + String(tahun);
//mengubah variabel tanggal_sekarang dari string menjadi array
tanggal_sekarang.toCharArray(arr_tanggal, 25);
//display data tanggal
if (myDisplay.displayAnimate()) {
myDisplay.displayText(arr_tanggal, myDisplay.getTextAlignment(), myDisplay.getSpeed(), myDisplay.getPause(), PA_SCROLL_LEFT, PA_SCROLL_LEFT);
myDisplay.displayReset();
counter++; // counter akan bertambah 1
// setelah counter lebih dari 1, maka posisi berubah menjadi jam
if(counter > 1){
posisi = "stjam";
counter = 0;
myDisplay.displayClear();
}
}
delay(100);
}
void baca_jam(){
DateTime now = rtc.now();
//mendeklarasikan data jam dan menit
int jam, menit;
String waktu_sekarang;
//--jam--//
jam = now.hour();
//menambahkan 0 jika jam kurang dari 10
String sJam="";
if (jam < 10){
sJam = "0" + String(jam);
}else{
sJam = String(jam);
}
//--menit--//
menit = now.minute();
//menambahkan 0 jika menit kurang dari 10
String sMenit="";
if (menit < 10){
sMenit = "0" + String(menit);
}else{
sMenit = String(menit);
}
//konfigurasi variabel dot
if(dot == " "){
dot = ":";
}else{
dot = " ";
}
// menggabungkan jam dan menit dalam satu variabel
waktu_sekarang = sJam + dot + sMenit;
//tampilkan data jam di matrix
//meletakkan data ditengah
myDisplay.setTextAlignment(PA_CENTER);
//print data waktu_sekarang
myDisplay.print(waktu_sekarang);
counter++; // counter bertambah 1
//jam akan berubah menjadi tanggal setelah hitungan counter ke 20
if(counter == 20){
posisi = "sttanggal";
counter = 0;
myDisplay.displayClear();
}
delay(1000);
}