#include <Adafruit_NeoPixel.h>
#include <IRremote.h>
#define PIN 6 // Pin, kde je pripojený NeoPixel
#define NUMPIXELS 20 // Celkový počet NeoPixelov v reťazci
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
unsigned long previousMillisZelene = 0;
const long intervalZelene = 1000; // Interval pre blikanie zelených (v milisekundách)
unsigned long previousMillisSerial = 0;
const long intervalSerial = 100; // Interval pre kontrolu sériovej komunikácie (v milisekundách)
int pocetSviec = 0; // Počet sviečok
int pocetZltychLED = 0; // Počet žltých LED
#define PIN_RECEIVER 2
IRrecv receiver(PIN_RECEIVER);
void setup() {
Serial.begin(9600);
pixels.begin(); // Inicializácia knižnice NeoPixel
pixels.show(); // Inicializácia farieb
receiver.enableIRIn();
}
void loop() {
blikajZelene(); // Blikanie zelenou farbou
kontrolaSerialu(); // Kontrola sériovej komunikácie a zobrazenie žltých LED
svietSviece(); // Zobrazenie sviečok podľa počtu
}
void svietSviece() {
pixels.clear(); // Vymazanie všetkých farieb
for (int i = 0; i < pocetSviec; i++) {
int index = i * 5; // Výpočet indexu pre každú sviečku (5 LED na sviečku)
if (index < NUMPIXELS) {
pixels.setPixelColor(index, pixels.Color(255, 255, 0)); // Žltá farba pre sviečky
}
}
for (int i = 0; i < pocetZltychLED; i++) {
int index = i * 5; // Výpočet indexu pre každú žltú LED (5 LED na sviečku)
if (index < NUMPIXELS) {
pixels.setPixelColor(index, pixels.Color(255, 255, 0)); // Žltá farba pre žlté LED
}
}
pixels.show(); // Aktualizácia zobrazenia
}
void blikajZelene() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillisZelene >= intervalZelene) {
previousMillisZelene = currentMillis;
for (int j = 0; j < 2; j++) {
for (int i = 0; i < NUMPIXELS; i++) {
if (i % 5 != 0) {
pixels.setPixelColor(i, pixels.Color(0, 255, 0)); // Zelená farba
} else {
pixels.setPixelColor(i, pixels.Color(255, 255, 0)); // Žltá farba pre sviece
}
}
pixels.show(); // Aktualizácia zobrazenia
delay(500); // Krátka pauza pre lepšiu viditeľnosť žltých LED
pixels.clear(); // Vymazanie všetkých farieb
svietSviece(); // Nastavenie späť na žltú farbu
delay(500); // Pauza pred ďalším blikaním
}
}
}
void kontrolaSerialu() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillisSerial >= intervalSerial) {
previousMillisSerial = currentMillis;
if (Serial.available() > 0) {
int novyPocetSviec = 4; // Načítanie čísla zo série pre počet sviečok
int novyPocetZltychLED = Serial.parseInt(); // Načítanie čísla zo série pre počet žltých LED
switch (receiver.decodedIRData.command) {
case 104:
pixels.clear();
break;
case 48:
novyPocetZltychLED = 1;
break;
case 24:
novyPocetZltychLED = 2;
break;
case 122:
novyPocetZltychLED = 3;
break;
case 16:
novyPocetZltychLED = 4;
break;
default:
pixels.clear();
}
Serial.println(novyPocetZltychLED);
// Ochrana proti neplatným hodnotám
if (novyPocetSviec >= 0 && novyPocetSviec <= 4) {
pocetSviec = novyPocetSviec;
}
if (novyPocetZltychLED >= 0 && novyPocetZltychLED <= 4) {
pocetZltychLED = novyPocetZltychLED;
}
}
}
}