СОДЕРЖАНИЕ ►
Библиотека для Arduino FastLED применяется для создания различных эффектов на адресной светодиодной ленте WS2812B. При разработке гирлянды на Ардуино использовалась именно эта библиотека, с помощью которой было сделано множество интересных эффектов. Чтобы разобраться в коде, необходимо отдельно рассмотреть описание библиотеки FastLED.h на русском с примерами программ.
Arduino FastLED описание библиотеки
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- источник питания 5 / 12 Вольт;
- адресная лента WS2812 / WS2811.
Скачать библиотеку можно на нашем сайте, на странице — Библиотеки для Ардуино, также ссылку для скачивания Фастлед мы разместили в конце этой записи. В архиве, как и в прочих популярных библиотеках для управления лентой ws2812b Ардуино, имеется несколько примеров скетчей, с помощью которых можно самостоятельно разобраться, как правильно использовать команды библиотеки FastLED.
Ошибка ‘FastLED.h no such file or directory’
Первое, с чем сталкивается каждый начинающий программист и долго не может понять в чем причина — это ошибки компиляции Ардуино при загрузке скетча. Ошибка FastLED.h no such file or directory означает, что на компьютере не установлена библиотека FastLED.h. Проблему достаточно просто устранить, установив FastLED. Это правило действует и при возникновении такой ошибки с другими библиотеками.
Описание команд библиотеки FastLED на русском
Далее пошагово разберем способ работы с библиотекой FastLED. Первым делом необходимо подключить библиотеку в скетче через команду #include. Затем следует задать константы (#define) для удобства программирования — количество пикселей и пин для подключения адресной ленты. В примерах можно встретить вариант, что тип адресной ленты и ее цветовой режим тоже задаются с помощью констант.
#include <FastLED.h> // подключаем библиотеку #define NUM_LEDS 100 // указываем количество светодиодов на ленте #define PIN 4 // указываем пин для подключения ленты CRGB leds[NUM_LEDS]; void setup() { // основные настройки для адресной ленты FastLED.addLeds <WS2812, PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(50); }
Кроме основных настроек в процедуре void setup() еще указывается яркость для светодиодов с помощью команды FastLED.setBrightness() — максимальное значение 255. Яркость можно поменять в любом месте программы, в том числе и в процедуре void loop(). В основном цикле будем включать последовательно пиксели разными цветами, которые задаются с помощью RGB палитры (объединим код для платы).
#include <FastLED.h> // подключаем библиотеку #define NUM_LEDS 100 // указываем количество светодиодов на ленте #define PIN 4 // указываем пин для подключения ленты CRGB leds[NUM_LEDS]; void setup() { // основные настройки для адресной ленты FastLED.addLeds <WS2812, PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(50); } void loop() { leds[0] = CHSV(0, 0, 255); // задаем для первого пикселя синий цвет FastLED.show(); // отправляем информацию на ленту delay(500); leds[1] = CHSV(0, 255, 0); // задаем для второго пикселя зеленый цвет FastLED.show(); // отправляем информацию на ленту delay(500); leds[2] = CRGB::Red; // задаем для третьего пикселя красный цвет FastLED.show(); // отправляем информацию на ленту delay(500); leds[3] = CRGB::White; // задаем для четвертого пикселя белый цвет FastLED.show(); // отправляем информацию на ленту delay(500); }
После загрузки прошивки вы можете поменять цвета пикселей на ленте. Как вы уже поняли из примера, цвета можно задавать двумя способами. А далее мы рассмотрим более сложные эффекты с библиотекой фастлед, которые в основе используют цикл for для быстрой отправки информации на ws2812b. Кроме предложенных вариантов, попробуйте загрузить в Ардуино скетчи из примеров для данной библиотеки.
FastLED примеры эффектов для WS2812B
Скетч для FastLed с эффектом «радуга»
#include "FastLED.h" // подключаем библиотеку фастлед byte bright = 50; // яркость LED светодиодов byte baza = 0; // изменение оттенка LED #define NUM_LEDS 100 #define PIN 4 CRGB leds[NUM_LEDS]; void setup() { FastLED.addLeds <WS2812, PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(bright); } void loop() { for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CHSV(baza+ i * 5, 255, 255); } baza++; FastLED.setBrightness(bright); FastLED.show(); delay(20); }
Скетч для FastLed с эффектом «конфетти»
#include "FastLED.h" // подключаем библиотеку фастлед byte bright = 50; // яркость LED светодиодов byte baza = 0; // изменение оттенка LED #define NUM_LEDS 100 #define PIN 4 CRGB leds[NUM_LEDS]; void setup() { FastLED.addLeds <WS2812, PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(bright); } void loop() { fadeToBlackBy(leds, NUM_LEDS, 2); int pos = random16(NUM_LEDS); leds[pos] += CHSV(baza++ + random8(64), 200, 255); FastLED.setBrightness(bright); FastLED.show(); }
Скетч для FastLed с эффектом «бегущий огонек»
#include "FastLED.h" // подключаем библиотеку фастлед byte bright = 50; // яркость LED светодиодов byte baza = 0; // изменение оттенка LED #define NUM_LEDS 100 #define PIN 4 CRGB leds[NUM_LEDS]; void setup() { FastLED.addLeds <WS2812, PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(bright); } void loop() { fadeToBlackBy(leds, NUM_LEDS, 2); int pos = beatsin16(13, 0, NUM_LEDS - 1); leds[pos] += CHSV(baza++, 255, 192); FastLED.setBrightness(bright); FastLED.show(); }
Скетч для FastLed с эффектом «циклон»
#include "FastLED.h" // подключаем библиотеку фастлед byte bright = 50; // яркость LED светодиодов byte baza = 0; // изменение оттенка LED #define NUM_LEDS 100 #define PIN 4 CRGB leds[NUM_LEDS]; void setup() { FastLED.addLeds <WS2812, PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(bright); } void loop() { for (int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(250); } for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CHSV(baza++, 255, 255); FastLED.setBrightness(bright); FastLED.show(); delay(20); } }
Скетч для FastLed с эффектом «фокус»
#include "FastLED.h" // подключаем библиотеку фастлед byte bright = 50; // яркость LED светодиодов byte baza = 0; // изменение оттенка LED #define NUM_LEDS 100 #define PIN 4 CRGB leds[NUM_LEDS]; void setup() { FastLED.addLeds <WS2812, PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(bright); } void loop() { fadeToBlackBy(leds, NUM_LEDS, 2); for (int i = 0; i < 8; i++) { leds[beatsin16(i + 7, 0, NUM_LEDS - 1)] |= CHSV(baza+=16, 200, 255); } FastLED.setBrightness(bright); FastLED.show(); delay(20); }
Скетч для FastLed с эффектом «радуга с мерцанием»
#include "FastLED.h" // подключаем библиотеку фастлед byte bright = 50; // яркость LED светодиодов byte baza = 0; // изменение оттенка LED #define NUM_LEDS 100 #define PIN 4 CRGB leds[NUM_LEDS]; void setup() { FastLED.addLeds <WS2812, PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(bright); } void loop() { fill_rainbow( leds, NUM_LEDS, baza++, 7); if (random8() < 80) { leds[ random16(NUM_LEDS) ] += CRGB::White; } FastLED.setBrightness(bright); FastLED.show(); delay(20); }
Скачать библиотеку FastLED для Ардуино
Скачать библиотеку FastLED Arduino можно по ссылке: скачать FastLED.h. Кроме того, скачать все популярные библиотеки для программирования Arduino Uno или Nano с адресной лентой можно на странице — Библиотеки Ардуино. Если у вас остались вопросы по командам библиотеки Fast LED или вы хотите предложить свои варианты эффектов для адресных светодиодов — оставляйте их в комментариях к записи.










Спасибо за подробный разбор библиотеки для адресной ленты
Спасибо за урок, а есть уроки где несколько режимов у ленты ?
У меня возникло два вопроса:
1) Что такое CRGB leds[NUM_LEDS];?
2) Возможно сделать два разных канала? С разными режимами?
Автор сам не знает что пишет или копирует. Для начала нужно понимание что такое цветовая модель HSV, на основе ее и сделано управление в этой библиотеке. Функция CHSV(0, 0, 0); принимает 3 значения Цветовой тон, Насыщенность, Яркость.
Соответственно в коде из примера первый диод светит первый белым второй выключен.
void loop() {
leds[0] = CHSV(0, 0, 255); // задаем для первого пикселя синий цвет
FastLED.show(); // отправляем информацию на ленту
delay(500);
leds[1] = CHSV(0, 255, 0); // задаем для второго пикселя зеленый цвет
FastLED.show(); // отправляем информацию на ленту
delay(500);
Но все равно спасибо, помогло разобраться самому, а это вдвойне приятней.
Ага, с тем же столкнулся, поставил вместо CHSV CRGB (0, 0, 255) и пошло по цветам.
как прикрутить к контроллеру четыре ленты по 21-му светодиоду в каждом?
Соединить их последовательно или каждую ленту подключить к разным пинам
Поддерживает ли FAstLED ATtiny85? Скетч на Nano с использованием ws2811работает, а на ATtiny85 Arduino 1.8.15 пишет # pragma message «No hardware SPI pins defined. All SPI access will default to bitbanged output»