#include <Wire.h>
#include <LiquidCrystal_I2C.h>
constexpr uint8_t startSecond = 0;
constexpr uint8_t startMinute = 17;
constexpr uint8_t startHour = 18;
LiquidCrystal_I2C lcd(0x27,16,2);
void goSecond(uint8_t mySecond) {
if ((mySecond < 10) || (mySecond == 0)) {
lcd.setCursor(6,0);
lcd.print("0");
lcd.setCursor(7,0);
lcd.print(mySecond);
}
else {
lcd.setCursor(6,0);
lcd.print(mySecond);
}
}
void goMinute(uint8_t myMinute) {
if ((myMinute < 10) || (myMinute == 0)) {
lcd.setCursor(3,0);
lcd.print("0");
lcd.setCursor(4,0);
lcd.print(myMinute);
}
else {
lcd.setCursor(3,0);
lcd.print(myMinute);
}
}
void goHour(uint8_t myHour) {
if ((myHour < 10) || (myHour == 0)) {
lcd.setCursor(0,0);
lcd.print("0");
lcd.setCursor(1,0);
lcd.print(myHour);
}
else {
lcd.setCursor(0,0);
lcd.print(myHour);
}
}
void setup() {
lcd.init();
lcd.backlight();
goSecond(startSecond);
goMinute(startMinute);
goHour(startHour);
}
void loop() {
uint32_t currentMillis = millis();
static uint32_t interval = 1000, previousMillis = 0;
static uint8_t mySecond = 0;
static uint8_t myMinute = 0;
static uint8_t myHour = 0;
static byte flgColons = 0;
if(currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
flgColons = !flgColons;
if (flgColons) {
lcd.setCursor(2,0);
lcd.print(":");
lcd.setCursor(5,0);
lcd.print(":");
}
else {
lcd.setCursor(2,0);
lcd.print(" ");
lcd.setCursor(5,0);
lcd.print(" ");
}
if (mySecond < 59) {
mySecond++;
goSecond(mySecond);
}
else {
mySecond = 0;
goSecond(mySecond);
if (myMinute < 59) {
myMinute++;
goMinute(myMinute);
}
else {
myMinute = 0;
goMinute(myMinute);
if (myHour < 23) {
myHour++;
goHour(myHour);
}
else {
myHour = 0;
goHour(myHour);
}
}
}
}
}