Модуль создает эффект радужного переливания на адресной светодиодной ленте

C++
void rainbow()
{
	for (long firstPixelHue = 0; firstPixelHue < 3 * 65536; firstPixelHue += 256)
	{
		for (int i = 0; i < strip.numPixels(); i++)
		{ // For each pixel in strip...
			int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
			strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
		}
		strip.show(); // Update strip with new contents
		delay(5);			// Pause for a moment
		repeat_led_rainbow = false;
	}
	repeat_led_rainbow = false;
	if (!loop_led_rainbow)
	{
		for (int i = 0; i < strip.numPixels(); i++)
		{
			strip.setPixelColor(i, 0); // Выключение светодиодов
		}
		strip.show();
	}
}

void rainbowTask(void *pvParameters)
{
	// uint32_t color = *(uint32_t *)pvParameters;
	while (true)
	{
		if (loop_led_rainbow && repeat_led_rainbow) // Если repeat_led_rainbow изменился с false на true
		{
			rainbow();									// Выполняем rainbow
			while (!repeat_led_rainbow) // Ожидаем, пока repeat_led_rainbow не станет false
			{
				vTaskDelay(10 / portTICK_PERIOD_MS);
			}
			repeat_led_rainbow = true; // Устанавливаем флаг предыдущего состояния
		}
		else
		{
			repeat_led_rainbow = false;					 // Обновляем флаг предыдущего состояния
			vTaskDelay(10 / portTICK_PERIOD_MS); // Задержка между проверками состояния loop_led_rainbow
		}
	}
	vTaskDelete(NULL);
}