// NeoPixel modul s 8 RGB LED WS2812
// navody.dratek.cz

// připojení potřebné knihovny
#include <Adafruit_NeoPixel.h>
// nastavení propojovacího pinu
#define pinDIN 5
// nastavení počtu LED modulů
#define pocetLED 128
// inicializace LED modulu z knihovny
Adafruit_NeoPixel rgbWS = Adafruit_NeoPixel(pocetLED, pinDIN, NEO_GRB + NEO_KHZ800);

void setup() {
  // zahájení komunikace s LED modulem
  rgbWS.begin();
  // nastavení červené barvy na první LED diodu
  nastavRGB(255, 0  , 0  , 1);
  delay(500);
  // nastavení zelené barvy na druhou LED diodu
  nastavRGB(0  , 255, 0  , 2);
  delay(500);
  // nastavení modré barvy na třetí LED diodu
  nastavRGB(0  , 0  , 255, 3);
  delay(500);
  // nastavení černé barvy na první 3 LED diody = vypnutí
  nastavRGB(0  , 0  , 0  , 1);
  nastavRGB(0  , 0  , 0  , 2);
  nastavRGB(0  , 0  , 0  , 3);
}
void loop() {
  // pomocí funkce nastavRGB vytvoř náhodnou kombinaci barev
  // a pro každý běh smyčky vyber náhodnou LED diodu,
  // funkce random vytvoří náhodné číslo
  // z rozsahu v závorkách random(min, max-1)
  byte cervena = random(0, 256);
  byte zelena  = random(0, 256);
  byte modra   = random(0, 256);
  byte dioda   = random(1, (pocetLED + 1));
  nastavRGB(cervena, zelena, modra, dioda);
}
// funkce pro nastavení zadané barvy na zvolenou diodu
void nastavRGB (byte r, byte g, byte b, int cislo) {
  // vytvoření proměnné pro ukládání barev
  uint32_t barva;
  // načtení barvy do proměnné
  barva = rgbWS.Color(r, g, b);
  // nastavení barvy pro danou LED diodu,
  // číslo má pořadí od nuly
  rgbWS.setPixelColor(cislo - 1, barva);
  // aktualizace barev na všech modulech
  rgbWS.show();
}