//Proyek #33:Jam Real Time dotmatrix
// Menggunakan Library arduino:
#include <RTClib.h>
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
RTC_DS1307 RTC;
// Sesuaikan tipe hardware, ukuran, and output pin dari led dot matriks yang digunakan:
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX_DEVICES 6 // jumlah modul dot matrix yang digunakan
// setup hardware SPI:
// MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
//Setup for software SPI:
#define CS_PIN 10 // sambungkan CS PIN dot matriks pada pin 10 arduino
#define DATA_PIN 11
#define CLK_PIN 13
#define SPEED_TIME 50 // kecepatan animasi teks/transisi berjalan
#define PAUSE_TIME 0
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
//siapkan variabel untuk tampilan tanggal_sekarang dalam bentuk char array
char arrTgl[20]; //12 juli 2021
//siapkan variabel array untuk menampung nama-nama bulan
String bln [12] = {"Jan", "Feb", "Mar", "Apr","Mei", "Jun", "Jul", "Agst", "Sept", "Okt", "Nov", "Des"};
String hari [7] = {"Minggu,", "Senin,", "Selasa,", "Rabu,","Kamis,", "Jumat,", "Sabtu,"};
//sediakan variabel kontrol pergantian tampilan antara jam dan tanggal
int counter = 0;
//sediakan variabel untuk menentukan jam atau tanggal yang tampil
String posisi = "jam";
unsigned long previousMillis = 0;
void setup () {
Serial.begin(115200);
RTC.begin();// buka komunikasi chip RTC
/*aktifkan instruksi ini untuk set tanggal dan waktu yang dinginkan saat compiler program */
//RTC.adjust(DateTime(__DATE__, __TIME__));
myDisplay.begin(); // Inisialisai object MD_Parola:
myDisplay.setIntensity(5); // Set intensitas kecerahan/brightness dari tampilan dot matrix (0-15):
myDisplay.displayClear(); // Bersihkan Tampilan:
}
void loop(){
//uji posisi jam yang ditampilkan
if(posisi == "jam")
baca_jam ();
else
if (posisi=="tanggal")
baca_tanggal();
//running text
}
void baca_jam(){
DateTime now = RTC.now();//dapatkan data jam & tanggal skrg
String jam, menit, detik, jam_sekarang;
jam = String (now.hour() );
menit = String (now.minute());
detik = String (now.second());
if (now.minute()<10 ){
menit = "0" + menit;
}
if (now.second()<10 ){
detik = "0" + detik;
}
jam_sekarang = jam + ":"+ menit +":" + detik;
Serial.println(jam_sekarang);
myDisplay.setTextAlignment(PA_CENTER);
myDisplay.print(jam_sekarang);
// gunakan instruksi delay tanpa delay agar waktu jam tidak terganggu
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 1000) //jeda 1 detik
{
previousMillis = currentMillis;
counter++;
}
if(counter ==10){
posisi = "tanggal";
counter = 0;
myDisplay.displayClear();
}
}
void baca_tanggal(){
DateTime now = RTC.now();//dapatkan data jam & tanggal skrg
String tanggal, bulan, tahun, Tanggal_sekarang;
String Array_hari = now.dayOfTheWeek()[hari];
tanggal = String (now.day() );
//menambahkan karakter nol didepan tgl yang kurang dari 10
if(now.day() < 10){
tanggal = "0"+ tanggal;
}
//bulan = String (now.month());
String Array_bulan = now.month()[bln-1];
tahun = String (now.year());
Tanggal_sekarang = Array_hari + tanggal + " " + Array_bulan +" "+ tahun;
Serial.println(Tanggal_sekarang);
//ubah tipe string tanggal_sekarang menjadi char array, ditampung kedalam variabel arrtgl
Tanggal_sekarang.toCharArray (arrTgl,20) ;
//running text
if(myDisplay.displayAnimate())
{
myDisplay.displayText(arrTgl, PA_CENTER, SPEED_TIME, PAUSE_TIME, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
myDisplay.displayReset();
counter++;
if(counter > 1){
posisi = "jam";
counter = 0;
myDisplay.displayClear();
}
}
// gunakan intruksi delay tanpa delay agar waktu jam tidak terganggu
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 100) //jeda 100 mili detik
{
previousMillis = currentMillis;
}
}