#include <IRremote.h>
#include <LiquidCrystal_I2C.h>
#define PIN_RECEIVER 2 // Pin sygnałowy odbiornika IR
IRrecv receiver(PIN_RECEIVER);
LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27 to domyślny adres wyświetlacza LCD
int hours = 0;
int minutes = 0;
int seconds = 0;
void setup()
{
lcd.init();
lcd.backlight(); // włączenie podświetlenia
lcd.setCursor(0, 0);
printTime(); // wyświetlenie czasu
receiver.enableIRIn(); // uruchomienie odbiornika IR
}
void loop()
{
// sprawdzenie czy odebrano sygnał IR
if (receiver.decode()) {
translateIR();
receiver.resume(); // odebranie następnej wartości
}
lcd.setCursor(0, 0);
printTime(); // wyświetlenie czasu
seconds++;
if (seconds == 60) {
seconds = 0;
minutes++;
if (minutes == 60) {
minutes = 0;
hours++;
if (hours == 24) {
hours = 0;
}
}
}
delay(1000);
}
void printTime() {
if (hours < 10) {
lcd.print("0");
}
lcd.print(hours);
lcd.print(":");
if (minutes < 10) {
lcd.print("0");
}
lcd.print(minutes);
lcd.print(":");
if (seconds < 10) {
lcd.print("0");
}
lcd.print(seconds);
}
void translateIR()
{
// Pobranie komendy na podstawie odebranego kodu IR
switch (receiver.decodedIRData.command) {
case 34:
hours++;
if (hours == 24) {
hours = 0;
}
break;
case 224:
hours--;
if (hours == -1) {
hours = 23;
}
break;
case 2:
minutes++;
if (minutes == 60) {
minutes = 0;
hours++;
if (hours == 24) {
hours = 0;
}
}
break;
case 168:
minutes--;
if (minutes == -1) {
minutes = 59;
hours--;
if (hours == -1) {
hours = 23;
}
}
seconds = 0;
break;
case 194:
seconds++;
if (seconds == 60) {
seconds = 0;
minutes++;
if (minutes == 60) {
minutes = 0;
hours++;
if (hours == 24) {
hours = 0;
}
}
}
break;
}
}