#include <TM1637.h>
#include <RTClib.h>
#include <Button.h>
RTC_DS1307 rtc;
int CLK = 2;
int DIO = 3;
TM1637 tm(CLK, DIO);
Button hourButton(A0);
Button minuteButton(A1);
Button modeButton(A2);
int mode = 0;
int adjustHour = 7;
int adjustMinute = 0;
void setup() {
Serial.begin(9600);
tm.init();
tm.set(3);
if (!rtc.begin())
{
Serial.print("Khong the tim thay rtc");
while (1);
}
if (!rtc.isrunning())
{
Serial.print("RTC ko hoat dong");
}
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
void loop() {
Mode();
if (mode == 0){
DisplayTime();
AdjustTime();
}
else if (mode == 1){
DisplayDayMonth();
}
else if (mode == 2){
DisplayYear();
}
}
void Mode(){
if (modeButton.released()){
mode ++;
}
if (mode > 2){
mode -= 3;
}
}
void DisplayTime(){
DateTime now = rtc.now();
int h = (now.hour()+adjustHour)%24;
int m = (now.minute()+adjustMinute)%60;
int h0 = int (h/10);
int h1 = h%10;
int m0 = int (m/10);
int m1 = m%10;
tm.display(0,h0);
tm.display(1,h1);
if (now.second()%2 == 0){
tm.point(0);
}
if (now.second()%2 == 1){
tm.point(1);
}
tm.display(2,m0);
tm.display(3,m1);
}
void AdjustTime(){
if (hourButton.released()){
adjustHour ++;
}
if (minuteButton.released()){
adjustMinute ++;
}
adjustHour %=24;
adjustMinute %=60;
}
void DisplayDayMonth(){
DateTime now = rtc.now();
int d = now.day();
int M = now.month();
int d0 = int (d/10);
int d1 = d%10;
int M0 = int (M/10);
int M1 = M%10;
tm.display(0,d0);
tm.display(1,d1);
tm.point(1);
tm.display(2,M0);
tm.display(3,M1);
}
void DisplayYear(){
DateTime now = rtc.now();
int y = now.year();
int y0 = int (y/1000);
int y1 = int ((y-y0*1000)/100);
int y2 = int ((y-y0*1000-y1*100)/10);
int y3 = y-y0*1000-y1*100-y2*10;
tm.display(0,y0);
tm.display(1,y1);
tm.point(0);
tm.display(2,y2);
tm.display(3,y3);
}