#include <Wire.h>
#include <TM1637Display.h>
#include <SimpleRotary.h>
#include <RTClib.h>
///////////////////////////////////////////////
RTC_DS3231 rtc;
///////////////////////////////////////////////
const byte PIN_CLK = 17; // any digital pin
const byte PIN_DIO = 16; // any digital pin
TM1637Display display(PIN_CLK, PIN_DIO);
///////////////////////////////////////////////
SimpleRotary rotary(11, 10, 12);
///////////////////////////////////////////////
unsigned long present_Time;
unsigned long display_Time;
byte systemState, second, minute, hour;
////////////////////////////////////////////////
void GetRTC() {
DateTime now = rtc.now();
second = now.second();
minute = now.minute();
hour = now.hour();
}
void setup(){
Wire.begin();
rtc.begin();
display.setBrightness(100);
}
void loop(){
switch (systemState) {
default:
present_Time = millis();
if (present_Time - display_Time >= 500) {
display_Time = present_Time;
GetRTC();
if (second%2 == 1 ){
display.showNumberDecEx(hour*100+minute, 0b11100000, true);
} else {
display.showNumberDec(hour*100+minute, true);
}
}
if (rotary.pushLong(500) == 1) {
systemState = 1;
display.clear();
}
break;
/////////////////////////////////////////////
case 1:
display.showNumberDec(hour,false,2,0);
if ( rotary.rotate() == 1 ){
hour++;
if (hour > 23) {
hour = 0;
}
delay(35);
}
if ( rotary.push() == 1 ){
systemState = 2;
display.clear();
}
break;
/////////////////////////////////////////////
case 2:
display.showNumberDec(minute,false);
if ( rotary.rotate() == 1 ){
minute++;
if (minute > 59) {
hour = 0;
}
delay(35);
}
if ( rotary.push() == 1 ){
systemState = 3;
break;
}
break;
/////////////////////////////////////////////
case 3:
rtc.adjust(DateTime(2024, 1, 1, hour, minute, 0));
systemState = 0;
break;
}
}