#include <IRremote.h>
// Definicje przycisków pilota IR
#define BUTTON_1 0xFF30CF
#define BUTTON_2 0xFF18E7
#define BUTTON_3 0xFF7A85
#define BUTTON_4 0xFF10EF
#define BUTTON_5 0xFF38C7
#define BUTTON_OFF 0xFFA25D // Dodaj przycisk "OFF" do wyłączania diod
#define BUTTON_ALL_ON 0xFF5AA5 // Dodaj przycisk "ALL ON" do włączania wszystkich diod
#define BUTTON_ALL_OFF 0xFF4AB5 // Dodaj przycisk "ALL OFF" do wyłączania wszystkich diod
// Piny do podłączenia diod LED
const int ledPins[] = {3, 4, 5, 6, 7};
const int numLEDs = 5;
// Definicje do soft start i soft end
const int fadeDuration = 1000; // Czas trwania efektu zmiany jasności (1 sekunda)
IRrecv irrecv(2);
decode_results results;
int activeLED = -1; // Numer aktualnie aktywnej diody (-1 oznacza brak aktywnej diody)
void setup() {
irrecv.enableIRIn(); // Włącz odbiór pilota IR
for (int i = 0; i < numLEDs; i++) {
pinMode(ledPins[i], OUTPUT); // Ustaw piny diod LED jako wyjścia
analogWrite(ledPins[i], 0); // Wyłącz wszystkie diody na początku
}
}
void loop() {
if (irrecv.decode(&results)) {
unsigned long currentButton = results.value;
switch (currentButton) {
case BUTTON_1:
activateLED(0); // Włącz pierwszą diodę LED
break;
case BUTTON_2:
activateLED(1); // Włącz drugą diodę LED
break;
case BUTTON_3:
activateLED(2); // Włącz trzecią diodę LED
break;
case BUTTON_4:
activateLED(3); // Włącz czwartą diodę LED
break;
case BUTTON_5:
activateLED(4); // Włącz piątą diodę LED
break;
case BUTTON_OFF:
deactivateLED(); // Wyłącz aktywną diodę LED (jeśli istnieje)
break;
case BUTTON_ALL_ON:
activateAllLEDs(); // Włącz wszystkie diody LED
break;
case BUTTON_ALL_OFF:
deactivateAllLEDs(); // Wyłącz wszystkie diody LED
break;
}
irrecv.resume(); // Kontynuuj odbiór pilota IR
}
}
void activateLED(int ledIndex) {
deactivateLED(); // Wyłącz aktywną diodę LED (jeśli istnieje)
int fadeAmount = 5; // Wartość zmiany jasności przy każdej iteracji
// Soft start
for (int brightness = 0; brightness <= 255; brightness += fadeAmount) {
analogWrite(ledPins[ledIndex], brightness);
delay(fadeDuration / 255);
}
activeLED = ledIndex; // Ustaw aktualnie aktywną diodę
// Oczekuj na sygnał "OFF" lub inną akcję
while (activeLED == ledIndex) {
if (irrecv.decode(&results)) {
if (results.value == BUTTON_OFF) {
deactivateLED(); // Wyłącz diodę po naciśnięciu przycisku "OFF"
}
irrecv.resume(); // Kontynuuj odbiór pilota IR
}
}
}
void activateAllLEDs() {
for (int i = 0; i < numLEDs; i++) {
activateLED(i); // Włącz każdą diodę LED
}
}
void deactivateLED() {
if (activeLED != -1) {
int fadeAmount = 5; // Wartość zmiany jasności przy każdej iteracji
// Soft end
for (int brightness = 255; brightness >= 0; brightness -= fadeAmount) {
analogWrite(ledPins[activeLED], brightness);
delay(fadeDuration / 255);
}
// Wyłącz diodę LED
analogWrite(ledPins[activeLED], 0);
activeLED = -1; // Brak aktywnej diody
}
}
void deactivateAllLEDs() {
for (int i = 0; i < numLEDs; i++) {
analogWrite(ledPins[i], 0); // Wyłącz każdą diodę LED
}
activeLED = -1; // Brak aktywnej diody
}