Помогите разобраться с библиотекой FastLED.h

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Власенко Матвей, 1 фев 2019.

  1. Добрый день. На днях пришла адресная лента 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; }.
     
  2. parovoZZ

    parovoZZ Гуру

    Есть всё в
    По крайней мере в моей версии всё есть.
     
  3. Airbus

    Airbus Радиохулиган Модератор

    AAAAAAAAAAAAA!!!!!!!!!!!!!!
    [​IMG]
     
    NikitOS нравится это.