// Подключаем библиотеку для работы со светодиодами WS2812 #include // Даём понятное имя пину A0 со светодиодным модулем WS2812 constexpr uint8_t LED_WS2812_PIN = A0; // В цепочке гирлянды семь светодиодных модулей // А на каждом модуле по семь светодиодов WS2812 // Количество светодиодов LED_WS2812 = 49 constexpr uint8_t COUNT_LED_WS2812 = 49; // Создаём объект для управления светодиодами WS2812 Adafruit_NeoPixel led = Adafruit_NeoPixel(COUNT_LED_WS2812, LED_WS2812_PIN, NEO_GRB + NEO_KHZ800); void setup() { // Инициализируем светодиодные модули WS2812 led.begin(); // Устанавливаем яркость led.setBrightness(50); // Обновляем состояние светодиодов led.show(); } void loop() { // Эффект «бегущий огонь» красного цвета colorWipe(led.Color(255, 0, 0), 50); // Эффект «бегущий огонь» зелёного цвета colorWipe(led.Color(0, 255, 0), 50); // Эффект «бегущий огонь» синего цвета colorWipe(led.Color(0, 0, 255), 50); // Театральный эффект «бегущий огонь» белого цвета theaterChase(led.Color(127, 127, 127), 50); // Театральный эффект «бегущий огонь» красного цвета theaterChase(led.Color(127, 0, 0), 50); // Театральный эффект «бегущий огонь» синего цвета theaterChase(led.Color(0, 0, 127), 50); // Эффект радуги rainbow(20); // Эффект прокручивающейся радуги rainbowCycle(20); // Театральный эффект «бегущий огонь» с радужной заливкой theaterChaseRainbow(50); } // Функция последовательного зажигания светодиодов указанным цветом void colorWipe(uint32_t c, uint8_t timeWait) { for (uint16_t i = 0; i < led.numPixels(); i++) { led.setPixelColor(i, c); led.show(); delay(timeWait); } } // Функция эффекта плавного переливания цветов в виде радуги void rainbow(uint8_t timeWait) { uint16_t i, j; for (j = 0; j < 256; j++) { for (i = 0; i < led.numPixels(); i++) { led.setPixelColor(i, valueToRainbowColor((i + j) & 255)); } led.show(); delay(timeWait); } } // Функция эффекта плавного прокручивания цветов в виде радуги void rainbowCycle(uint8_t timeWait) { uint16_t i, j; for (j = 0; j < 256 * 5; j++) { for (i = 0; i < led.numPixels(); i++) { led.setPixelColor(i, valueToRainbowColor(((i * 256 / led.numPixels()) + j) & 255)); } led.show(); delay(timeWait); } } // Функция театрального эффекта «бегущие огни» void theaterChase(uint32_t c, uint8_t timeWait) { for (int j = 0; j < 10; j++) { for (int q = 0; q < 3; q++) { for (uint16_t i = 0; i < led.numPixels(); i = i + 3) { led.setPixelColor(i + q, c); } led.show(); delay(timeWait); for (uint16_t i = 0; i < led.numPixels(); i = i + 3) { led.setPixelColor(i + q, 0); } } } } // Функция театрального эффекта «бегущие огни» с радужными цветами void theaterChaseRainbow(uint8_t timeWait) { for (int j = 0; j < 256; j++) { for (int q = 0; q < 3; q++) { for (uint16_t i = 0; i < led.numPixels(); i = i + 3) { led.setPixelColor(i + q, valueToRainbowColor((i + j) % 255)); } led.show(); delay(timeWait); for (uint16_t i = 0; i < led.numPixels(); i = i + 3) { led.setPixelColor(i + q, 0); } } } } // Функция преобразования значения от 0 до 255 в цвет радуги // Цвета плавно переходят: красный → зелёный → синий → красный uint32_t valueToRainbowColor(byte wheelPos) { wheelPos = 255 - wheelPos; if (wheelPos < 85) { return led.Color(255 - wheelPos * 3, 0, wheelPos * 3); } if (wheelPos < 170) { wheelPos -= 85; return led.Color(0, wheelPos * 3, 255 - wheelPos * 3); } wheelPos -= 170; return led.Color(wheelPos * 3, 255 - wheelPos * 3, 0); }