// підключаємо необхідні бібліотеки
#include <IRremote.h>
#include <LiquidCrystal_I2C.h>
// визначаємо піни та деякі константи
#define led 6
#define relay 8
int brightness = 0;
int state = 0;
IRrecv irrecv(5); // підключили інфрачервоний приймач до 5 виводу
LiquidCrystal_I2C lcd(0x27, 16, 2); // встановлюємо параметри дисплею
void setup() {
// визначаємо піни на вихід
pinMode(led, OUTPUT);
pinMode(relay, OUTPUT);
irrecv.enableIRIn(); // Запуск ІЧ прилада/ зчитування
// увімкнення дисплею та підсвітки
lcd.init();
lcd.backlight();
}
void loop() {
// робимо умову. Якщо є якийсь сигнал для зчитування, то виконувати дії відповідно до кожного кейсу
// для управління реле та яскравістю світлодіода використаємо 4 кнопки, що знаходяться поруч з кнопкою плей. Тобто перемотка назад, вперед та зменшення/збільшення звуку відповідно.
// кожна кнопка має свій код, який ми визначили раніше
if (irrecv.decode()) {
switch (irrecv.decodedIRData.command) {
case 224:
lcd.clear(); // стерти дані з дисплею
lcd.setCursor(0, 0); // встановити курсор
lcd.print("Turn off"); // вивисти напис на дисплей
digitalWrite(relay, LOW); // вимкнути реле
state = 0; // змінну урівняти 0
break; // віхід з кейсу
case 144:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Turn on");
digitalWrite(relay, HIGH); // увімкнути реле
state = 1; // змінну урівняти 1
break;
case 2:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Bright +");
brightness = brightness + 50; // зібльшити змінну на 50 позицій
break;
case 152:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Bright -");
brightness = brightness - 50; // зменшити змінну на 50 позицій
break;
}
irrecv.resume(); // очистити вхідний буфер після обробки інформації
}
brightness = constrain(brightness, 0, 255); // обмежеити змінну в діапазоні 0 - 255
analogWrite(led, brightness); // подавати сигнал на світлодіод силою, що визначається змінною brightness
// умова виведення напису
if (state == true ) {
lcd.setCursor(0, 1);
lcd.print("relay on");
}
else {
lcd.setCursor(0, 1);
lcd.print("relay off");
}
// виводити на дисплей інфомації на скільки рівнів увімкнено світлодіод
switch (brightness) {
case 0:
lcd.setCursor(13, 1);
lcd.print("off");
break;
case 50:
lcd.setCursor(13, 1);
lcd.print("1");
break;
case 100:
lcd.setCursor(13, 1);
lcd.print("2");
break;
case 150:
lcd.setCursor(13, 1);
lcd.print("3");
break;
case 200:
lcd.setCursor(13, 1);
lcd.print("4");
break;
case 250:
lcd.setCursor(13, 1);
lcd.print("5");
break;
case 255:
lcd.setCursor(13, 1);
lcd.print("max");
break;
}
}