//MAX7219_RTC時鐘
#include <MD_Parola.h> //利用Parola 滾動文字
#include <MD_MAX72xx.h> //點矩陣
#include <SPI.h> //SPI_DIN=23,CLK=18
#include "RTClib.h" //RTC
//依硬體型態來選擇函式庫:3選1
//#define HARDWARE_TYPE MD_MAX72XX::FC16_HW //for 一般
//#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW //for wokwi
#define MAX_DEVICES 4 //使用4個MAX7219
#define CS_PIN 5 //CS接腳
//初始化
MD_Parola p=MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
RTC_DS1307 rtc; //物件名稱rtc
char day_week[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"};
void setup() {
Serial.begin(115200);
p.begin(); //啟動Parola
if (! rtc.begin()) { //RTC啟動
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
}
void loop() {
DateTime now = rtc.now(); //取得現在時間now
int dayofweek = now.dayOfTheWeek();//取得星期名稱
int hh=now.hour(); //取得小時
int mm=now.minute(); //取得分鐘
int ss=now.second(); //取得秒鐘
//顯示時分秒,dayofweek
Serial.println(String(hh)+":"+String(mm)+":"+String(ss)+" "+
day_week[dayofweek]);
String AmPm="A";
if (hh<12) AmPm="A";
else AmPm="P"; //AM PM判斷
String strhh=String(hh); //分鐘轉字串
if(strhh.length()==1) strhh +="0";//如果個位數,前補0
String strmm=String(mm); //分鐘轉字串
if(strmm.length()==1) strmm +="0";//如果個位數,前補0
String strss=String(ss); //秒數轉字串
if(strss.length()==1) strss +="0";//如果個位數,前補0
p.setTextAlignment(PA_LEFT); //置左對齊
if(ss%2==0) p.print(AmPm + strmm+ ":" +strss); //偶數秒顯示冒號:
else p.print(AmPm + strmm +" " +strss); //奇數秒空白
delay(1000);
}