#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <TimeLib.h>
// Inicjalizacja LCD przez I2C (adres 0x27, 16 znaków, 2 linie)
LiquidCrystal_I2C lcd(0x27, 16, 2);
const byte pstryczekMinus = 8;
const byte pstryczekZmien = 9;
const byte pstryczekPlus = 10;
const byte buzzer = 11;
byte godzina;
byte minuta;
byte sekunda;
const byte opoznienieDlugie = 250;
const byte opoznienieKrotkie = 25;
byte godzinaBudzika;
byte minutaBudzika;
bool budzik = false;
void setup() {
Wire.begin();
lcd.init();
lcd.backlight();
pinMode(pstryczekMinus, INPUT_PULLUP);
pinMode(pstryczekZmien, INPUT_PULLUP);
pinMode(pstryczekPlus, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
lcd.print(F(" 0:00 Ustaw czas"));
while (digitalRead(pstryczekZmien) == HIGH) {
regulujCzas();
}
setTime(godzina, minuta, 00, 01, 01, 2000);
budzikWylaczony();
delay(opoznienieDlugie);
}
void loop() {
while (digitalRead(pstryczekZmien) == HIGH) {
time_t czasOdczytany = now();
godzina = hour(czasOdczytany);
minuta = minute(czasOdczytany);
sekunda = second(czasOdczytany);
lcd.setCursor(0, 0);
wyswietlCzas();
wyswietlSekundy();
if (godzinaBudzika == godzina && minutaBudzika == minuta && budzik == true) {
analogWrite(buzzer, 255);
delay(opoznienieKrotkie);
analogWrite(buzzer, 0);
delay(opoznienieKrotkie);
}
}
lcd.clear();
if (budzik == true) {
budzik = false;
budzikWylaczony();
lcd.setCursor(0, 0);
lcd.print(F("Wylaczony"));
} else {
budzik = true;
godzina = godzinaBudzika;
minuta = minutaBudzika;
lcd.setCursor(0, 0);
wyswietlCzas();
lcd.print(F(" Ust.budzik"));
delay(opoznienieDlugie);
while (digitalRead(pstryczekZmien) == LOW) {}
while (digitalRead(pstryczekZmien) == HIGH) {
regulujCzas();
}
godzinaBudzika = godzina;
minutaBudzika = minuta;
lcd.setCursor(0, 0);
lcd.print(F("Wlaczony o "));
wyswietlCzas();
}
delay(opoznienieDlugie * 3);
while (digitalRead(pstryczekZmien) == LOW) {}
lcd.setCursor(8, 0);
lcd.print(F(" "));
}
void budzikWylaczony() {
lcd.setCursor(5, 0);
lcd.print(F(" --:--"));
}
void regulujCzas() {
if (digitalRead(pstryczekPlus) == LOW) {
zwiekszCzas();
lcd.setCursor(0, 0);
wyswietlCzas();
delay(opoznienieDlugie);
}
while (digitalRead(pstryczekPlus) == LOW) {
zwiekszCzas();
lcd.setCursor(0, 0);
wyswietlCzas();
delay(opoznienieKrotkie);
}
if (digitalRead(pstryczekMinus) == LOW) {
zmniejszCzas();
lcd.setCursor(0, 0);
wyswietlCzas();
delay(opoznienieDlugie);
}
while (digitalRead(pstryczekMinus) == LOW) {
zmniejszCzas();
lcd.setCursor(0, 0);
wyswietlCzas();
delay(opoznienieKrotkie);
}
}
void zwiekszCzas() {
minuta++;
if (minuta == 60) {
minuta = 0;
godzina++;
if (godzina == 24) {
godzina = 0;
}
}
}
void zmniejszCzas() {
minuta--;
if (minuta == 255) {
minuta = 59;
godzina--;
if (godzina == 255) {
godzina = 23;
}
}
}
void wyswietlCzas() {
if (godzina < 10) {
lcd.print(F(" "));
}
lcd.print(godzina);
lcd.print(F(":"));
if (minuta < 10) {
lcd.print(F("0"));
}
lcd.print(minuta);
}
void wyswietlSekundy() {
lcd.print(F(":"));
if (sekunda < 10) {
lcd.print(F("0"));
}
lcd.print(sekunda);
}