[Arduino] - Jam digital dan running text dengan LED Max7219
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <Wire.h> // DS3231clock
#include "RTClib.h" // DS3132 clock
/* JAM MEJA DIGITAL DENGAN RUNNING TEXT TGL
* KOMPONEN
* - ARDUINO
* - RTC DS 3231
* MODIFIED : APLIKASI-HEBAT STDUIO
* DATE MODIFIED : 4 NOV 2020
*/
//init
RTC_DS3231 rtc3231;
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
// HARDWARE SPI
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
// SOFTWARE SPI
//MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
//const uint8_t SPEED_IN = A5;
//const uint8_t DIRECTION_SET = 8; // change the effect
//const uint8_t INVERT_SET = 9; // change the invert
//const uint8_t SPEED_DEADBAND = 5;
uint8_t scrollSpeed = 60; // default frame delay value
textEffect_t scrollEffect = PA_SCROLL_LEFT;
textPosition_t scrollAlign = PA_LEFT;
uint16_t scrollPause = 20; // keceptan running text in milliseconds
// Global message buffers shared by Serial and Scrolling functions
#define BUF_SIZE 175
//int pjg=myString.length();
char curMessage[BUF_SIZE] = { "" };
char newMessage[BUF_SIZE] = { " "};
char c[100];
int tahun;
int bulan;
int tgl;
int jam;
int menit;
int detik;
int blink=0;
int blink1=0;
int dayoffweek;
String s;
String Hari[7] = {
"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"
};
bool newMessageAvailable = true;
void setup()
{
rtc3231.begin();
P.begin();
P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);
P.setIntensity(0);
// Clear the display:
P.displayClear();
//setting jam pertama kali
//rtc3231.adjust(DateTime(2020, 11, 2, 5, 36, 0));
}
void loop()
{
//P.setTextAlignment(PA_CENTER);
get_time();
//int detik=29;
s=Hari[dayoffweek] + " TGL "+ Konversi(tgl)+"-"+ Konversi(bulan)+ "-"+ Konversi(tahun)+" JAM "+ Konversi(jam)+ ":"+ Konversi(menit)+" ";
s.toUpperCase();
s.toCharArray(c, s.length()+1);
//P.displayReset();
//readSerial();
if (blink<=1)
{
if (P.displayAnimate())
{
if (newMessageAvailable)
{
//strcpy(curMessage, newMessage);
strcpy(curMessage, c);
newMessageAvailable = false;
}else {
blink++;
//P.displayClear();
newMessageAvailable = true;
P.displayText("welcome", PA_CENTER, scrollSpeed, 1000, PA_OPENING_CURSOR,PA_OPENING_CURSOR);
P.displayReset();
}
P.displayReset();
}
} else
{
blink++;
if (blink1==0)
{
P.print(Konversi(jam)+ ":"+ Konversi(menit));
blink1=1;
} else
{
P.print(Konversi(jam)+ " "+ Konversi(menit));
blink1=0;
}
delay(1000);
if( blink>=30) {
blink=0;P.displayClear();
newMessageAvailable = true;
P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);
}
}
}
String Konversi(int sInput) {
if (sInput < 10)
{
return"0" + String(sInput);
}
else
{
return String(sInput);
}
}
void get_time()
{
DateTime now= rtc3231.now();
//save time to array
tahun= now.year();
bulan = now.month();
tgl = now.day();
dayoffweek = now.dayOfTheWeek(); //returns 0-6 where 0 = Sunday
jam = now.hour();
menit = now.minute();
detik = now.second();
}
Video demo
Hasil Program Arduino