Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Библиотека Adafruit NeoPixel предназначена для работы с различными светодиодными лентами и кольцами (NeoPixel Ring), основанные на светодиодах WS2812 и WS2811.. Поддерживаются микроконтроллеры Arduino, ESP32 и некоторых других популярных платформ.
Домашняя страница https://github.com/adafruit/Adafruit_NeoPixel. Доступна через менеджер библиотек в Arduino IDE. На момент написания версия 1.3.5.
Библиотека NeoPixel резервирует 3 байта оперативной памяти на каждый светодиод. Это может быть критично для Arduino UNO при использовании больших лент (от 200 светодиодов и больше). Выбирайте мощные платы Arduino Mega, Arduino Duo, ESP32.
#include <Adafruit_NeoPixel.h>
Инициализация. Конструктор имеет три параметра.
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
По умолчанию библиотека настраивается на светодиоды WS2812, флаг NEO_GRB + NEO_KHZ800 в этом случае можно опустить. Если вы подключаете светодиодную ленту к порту 6, то номер порта можно не указывать. Таким образом обязательным параметром является только количество светодиодов в ленте.
Функция setPixelColor() позволяет задать любому светодиоду ленты определённый цвет. Существует три перегруженные версии функции.
Первая версия. В первом параметре n указывается номер светодиода в ленте (отсчёт с 0). В параметре red указывается число от 0 до 255, определяющее яркость красного цвета, в green - число от 0 до 255, определяющее яркость зелёного цвета, blue - число от 0 до 255, определяющее яркость синего цвета. Устанавливая разную яркость, мы смешиваем три цвета - красный, зелёный и синий, получая другие цвета и оттенки.
Вторая версия аналогична первому, только добавляется дополнительный параметр white. Используется в RGBW-лентах, в которых помимо трёхцветных светодиодов, установлены ещё и белые светодиоды, и данным параметром устанавливается их яркость. При создании объекта в последнем параметре необходимо указать NEO_GRBW или NEO_RGBW.
Третья версия задаёт цвет в виде 32-битного числа. Самый удобный вариант для создания различных эффектов.
pixels.setPixelColor(n, red, green, blue);
pixels.setPixelColor(n, red, green, blue, white);
pixels.setPixelColor(n, pixels.Color(0, 0, 1));
Адресная лента на M5Stack Fire