#include <LiquidCrystal_I2C.h> // I2C LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // ustawienie parametrów wyświetlacza LCD
// Ustawienie czasu po załączeniu programu na 20:59:50
int h=20;
int m=59;
int s=50;
// Przyciski do zmiany czasu
int button1;
int button2;
// Zdefiowanie przycisków do zmiany czasu
int hs=0;// pin 0 zmienia godzinę
int ms=1;// pin 1 zmienia minutę
// Zmienna do modyfikacji czasu
static uint32_t last_time, now = 0;
void setup()
{
// Inicjacja wyświetlacza LCD
lcd.init();
lcd.backlight();
lcd.clear();
// Zdefiniowanie funkcji przycisków
pinMode(hs,INPUT_PULLUP);
pinMode(ms,INPUT_PULLUP);
now=millis(); // odczytanie wartości czasu
}
void loop()
{
lcd.clear(); // Czyszczenie wyświetlacza (co zmienę czasu)
// Wyświetlenie czasu na wyświetlaczu
lcd.setCursor(0,0);
lcd.print("Czas ");
if(h<10)lcd.print("0");
lcd.print(h);
lcd.print(":");
if(m<10)lcd.print("0");
lcd.print(m);
lcd.print(":");
if(s<10)lcd.print("0");
lcd.print(s);
// Ustawienie 5 pętli co 200 ms do szybszego reagowania sytemu po wciśnięciu przycisku
for ( int i=0 ;i<5 ;i++)
{
while ((now-last_time)<200)
{
now=millis();
}
last_time=now;
// Ustawienie przycisków do zmiany czasu
button1=digitalRead(hs);
button2=digitalRead(ms);
// po wciśnięciu przycisku 1 zegar zmienia czas o jedną godzinę
if(button1==0)
{
h=h+1;
}
// po wciśnięciu przycisku 2 zegar zmienia czas o jedną minutę oraz resetuje wyświetlane sekundy
if(button2==0)
{
s=0;
m=m+1;
}
// funkcje ograniczające zmianę czasu przycisków dla wartosći zegarowych
if(s==60)
{
s=0;
m=m+1;
}
if(m==60)
{
m=0;
h=h+1;
}
if(h==24)
{
h=0;
}
// Aktualizacja czasu na wyświetlaczu, natychmiastowo po wciśnięciu przycisku
if((button1==0)|(button2==0))
{
lcd.setCursor(0,0);
lcd.print("Czas ");
if(h<10)lcd.print("0");
lcd.print(h);
lcd.print(":");
if(m<10)lcd.print("0");
lcd.print(m);
lcd.print(":");
if(s<10)lcd.print("0");
lcd.print(s);
}
}
/*
Ustawienia sposobu działania dla sekund, minut i godzin
Co sekunde wartość sekund zmienia sie o +1
Po osiągnięciu pełnego cyklu, odliczanie zaczyna się od nowa
Dodatkowo skończony cykl sekund zmienia minuty o +1, a cykl minut zwiększa godzinę o +1
*/
s=s+1;
if(s==60)
{
s=0;
m=m+1;
}
if(m==60)
{
m=0;
h=h+1;
}
if(h==24)
{
h=0;
}
}