#include <LiquidCrystal_I2C.h>
#define Btn 11
String time;
struct Time {
int hour;
int minute;
int sec;
};
Time getTime;
boolean flagClear = true;
boolean flagBtn;
boolean Butflag;
class Clock{
public:
Clock(int hour,int minute,int sec = 0){
Time.hour = hour;
Time.minute = minute;
Time.sec = sec;
_tmr = millis();
}
void setTime(int hour,int minute,int sec = 0){
Time.hour = hour;
Time.minute = minute;
Time.sec = sec;
_tmr = millis();
}
Time getTime(){
return Time;
}
void tick(){
if(millis()-_tmr>=1000){
_tmr = millis();
Time.sec++;
if(Time.sec>=60){
Time.sec=0;
Time.minute++;
}
if(Time.minute>=60){
Time.minute = 0;
Time.hour++;
}
if(Time.hour>=24){
Time.hour = 0;
}
}
}
private:
Time Time;
unsigned long _tmr;
};
LiquidCrystal_I2C lcd(0x27, 16, 2);
Clock clock(23,59,55);
void setup() {
pinMode(Btn, INPUT_PULLUP);
lcd.init(); // инициализация
lcd.backlight(); // включить подсветку
lcd.setCursor(1, 0);
lcd.clear();
Serial.begin(115200);
}
void loop() {
if(digitalRead(Btn)==0&Butflag==0){
flagBtn = 1;
Butflag = 1;
clock.setTime(23,59,55);
Serial.println("Click");
}
if(Butflag)Butflag=0;
if(flagBtn==1){
clock.tick();
getTime = clock.getTime();
time = String("Time: ")+getTime.hour+":"+getTime.minute+":"+getTime.sec;
lcd.setCursor(1,0);
lcd.print(time);
if(getTime.sec==0&flagClear==true){
lcd.clear();
flagClear=false;
}else if(getTime.sec==1)flagClear = true;
}
}