Добрый день. На днях пришла адресная лента WS2812. Я скачал и установил библиотеку FastLED.h. Загружаю готовые примеры - работает. Но я не могу разобраться с этой библиотекой. Скетч такой: #include <FastLED.h> #define LED_PIN 5 #define NUM_LEDS 50 #define BRIGHTNESS 64 #define LED_TYPE WS2811 #define COLOR_ORDER GRB CRGB leds[NUM_LEDS]; #define UPDATES_PER_SECOND 100 //В этом примере показано несколько способов настройки и использования палитр цветов // с FastLED. // // Эти компактные палитры обеспечивают простой способ перекрасить ваш // анимация на лету, быстро, легко и с низкими накладными расходами. // // Использование палитр на практике намного проще, чем в теории, поэтому сначала просто // запустите этот эскиз и наблюдайте за красивыми огнями, когда вы читаете // код. Хотя этот эскиз имеет восемь (или более) различных цветовых схем, // весь эскиз компилируется примерно до 6,5 K на AVR. // // FastLED предоставляет несколько предварительно настроенных цветовых палитр и // чрезвычайно легко создавать свои собственные цветовые схемы с помощью палитр. // // Некоторые замечания по более абстрактной "теории и практике" // FastLED компактные палитры находятся в нижней части этого файла. CRGBPalette16 currentPalette; TBlendType currentBlending; extern CRGBPalette16 myRedWhiteBluePalette; extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM; void setup() { delay( 3000 ); // питания задержки безопасность FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip ); FastLED.setBrightness( BRIGHTNESS ); currentPalette = RainbowColors_p; currentBlending = LINEARBLEND; } void loop() { ChangePalettePeriodically(); static uint8_t startIndex = 0; startIndex = startIndex + 1; /* скорость движения */ FillLEDsFromPaletteColors( startIndex); FastLED.show(); FastLED.delay(1000 / UPDATES_PER_SECOND); } void FillLEDsFromPaletteColors( uint8_t colorIndex) { uint8_t brightness = 255; for( int i = 0; i < NUM_LEDS; i++) { leds = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending); colorIndex += 3; } } // Здесь демонстрируется несколько различных цветовых палитр. // // FastLED предоставляет несколько предустановленных' палитры: RainbowColors_p, //RainbowStripeColors_p, // OceanColors_p, CloudColors_p, LavaColors_p, ForestColors_p, и PartyColors_p. // // Кроме того, можно вручную определить собственные цветовые палитры или написать // код, который создает цветовые палитры на лету. Все они показаны здесь. void ChangePalettePeriodically() { uint8_t secondHand = (millis() / 1000) % 60; static uint8_t lastSecond = 99; if( lastSecond != secondHand) { lastSecond = secondHand; if( secondHand == 0) { currentPalette = RainbowColors_p; currentBlending = LINEARBLEND; } if( secondHand == 10) { currentPalette = RainbowStripeColors_p; currentBlending = NOBLEND; } if( secondHand == 15) { currentPalette = RainbowStripeColors_p; currentBlending = LINEARBLEND; } if( secondHand == 20) { SetupPurpleAndGreenPalette(); currentBlending = LINEARBLEND; } if( secondHand == 25) { SetupTotallyRandomPalette(); currentBlending = LINEARBLEND; } if( secondHand == 30) { SetupBlackAndWhiteStripedPalette(); currentBlending = NOBLEND; } if( secondHand == 35) { SetupBlackAndWhiteStripedPalette(); currentBlending = LINEARBLEND; } if( secondHand == 40) { currentPalette = CloudColors_p; currentBlending = LINEARBLEND; } if( secondHand == 45) { currentPalette = PartyColors_p; currentBlending = LINEARBLEND; } if( secondHand == 50) { currentPalette = myRedWhiteBluePalette_p; currentBlending = NOBLEND; } if( secondHand == 55) { currentPalette = myRedWhiteBluePalette_p; currentBlending = LINEARBLEND; } } } // Эта функция заполняет палитру совершенно случайными цветами. void SetupTotallyRandomPalette() { for( int i = 0; i < 16; i++) { currentPalette = CHSV( random8(), 255, random8()); } } // Эта функция настраивает палитру черных и белых полос, // использование кода. Поскольку палитра эффективного массив // 16 цветов CRGB, различные функции fill_* можно использовать // чтобы установить их. void SetupBlackAndWhiteStripedPalette() { // "затемнить" все 16 записей палитры... fill_solid( currentPalette, 16, CRGB::Black); // и установите каждый четвертый белый. currentPalette[0] = CRGB::White; currentPalette[4] = CRGB::White; currentPalette[8] = CRGB::White; currentPalette[12] = CRGB::White; } // Эта функция настраивает палитру фиолетовых и зеленых полос. void SetupPurpleAndGreenPalette() { CRGB purple = CHSV( HUE_PURPLE, 255, 255); CRGB green = CHSV( HUE_GREEN, 255, 255); CRGB black = CRGB::Black; currentPalette = CRGBPalette16( green, green, black, black, purple, purple, black, black, green, green, black, black, purple, purple, black, black ); } // В этом примере показано, как настроить статическую цветовую палитру // который хранится в PROGMEM (flash), что почти всегда больше // в изобилии, чем таран. Статическая палитра PROGMEM как это // занимает 64 байта flash. const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM = { CRGB::Red, CRGB::Gray, // "белые" слишком яркий по сравнению с красным и синим CRGB::Blue, CRGB::Black, CRGB::Red, CRGB::Gray, CRGB::Blue, CRGB::Black, CRGB::Red, CRGB::Red, CRGB::Gray, CRGB::Gray, CRGB::Blue, CRGB::Blue, CRGB::Black, CRGB::Black }; // Дополнительные примечания к компактным палитрам FastLED: // // Обычно, в компьютерной графике, палитра (или "таблица поиска цвета") // содержит 256 записей, каждая из которых содержит определенный 24-битный цвет RGB. Вы можете после этого // индексировать цветовую палитру с помощью простого 8-битного (однобайтового) значения. // 256-входная цветовая палитра занимает 768 байт оперативной памяти, которая на Arduino // вполне возможно "слишком много" байтов. // // FastLED предлагает традиционные 256-элементные палитры для // может позволить себе 768-байтовую стоимость оперативной памяти. // / Однако FastLED также предлагает компактную альтернативу. Предложения FastLED // палитр, которые хранят 16 различных позиций, но можно обращаться как // они содержат 256 записей; это достигается путем интерполяции // между 16 явными элементами для создания пятнадцати промежуточных палитр // входы между каждой парой. // // Например, если задать первые две явные записи компакта // палитра становится зеленой (0,255,0) и синей (0,0,255), а затем извлекается // первые шестнадцать записей из виртуальной палитры (из 256), вы получите // Зеленый, затем плавный градиент от зеленого к синему, а затем синий. [/code] Пожалуйста объясните функции if( secondHand == 0) { currentPalette = RainbowColors_p; currentBlending = LINEARBLEND; } if( secondHand == 10) { currentPalette = RainbowStripeColors_p; currentBlending = NOBLEND; } if( secondHand == 15) { currentPalette = RainbowStripeColors_p; currentBlending = LINEARBLEND; } if( secondHand == 20) { SetupPurpleAndGreenPalette(); currentBlending = LINEARBLEND; } if( secondHand == 25) { SetupTotallyRandomPalette(); currentBlending = LINEARBLEND; } if( secondHand == 30) { SetupBlackAndWhiteStripedPalette(); currentBlending = NOBLEND; } if( secondHand == 35) { SetupBlackAndWhiteStripedPalette(); currentBlending = LINEARBLEND; } if( secondHand == 40) { currentPalette = CloudColors_p; currentBlending = LINEARBLEND; } if( secondHand == 45) { currentPalette = PartyColors_p; currentBlending = LINEARBLEND; } if( secondHand == 50) { currentPalette = myRedWhiteBluePalette_p; currentBlending = NOBLEND; } if( secondHand == 55) { currentPalette = myRedWhiteBluePalette_p; currentBlending = LINEARBLEND; }.