Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Библиотека Adafruit NeoPixel

Библиотека 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>

Инициализация. Конструктор имеет три параметра.

  1. NUMPIXELS - количество светодиодов в ленте
  2. PIN - порт, к которому подключена лента. По умолчанию используется порт 6
  3. NEO_GRB + NEO_KHZ800 - дополнительные флаги. Могут принимать значения (приводится только часть из возможных вариантов).
    • NEO_KHZ800 – по умолчанию. Передача данных на частоте 800 кГц (для лент на светодиодах WS2812)
    • NEO_KHZ400 – передача данных на частоте 400 кГц (для лент на светодиодах WS2811)
    • NEO_GRB – последовательность цветов при передаче данных (зелёный, красный, синий)
    • NEO_RGB – последовательность цветов при передаче данных (красный, зелёный, синий)
    • NEO_GRBW - используются дополнительные белые светодиоды
    • NEO_RGBW - используются дополнительные белые светодиоды

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

По умолчанию библиотека настраивается на светодиоды WS2812, флаг NEO_GRB + NEO_KHZ800 в этом случае можно опустить. Если вы подключаете светодиодную ленту к порту 6, то номер порта можно не указывать. Таким образом обязательным параметром является только количество светодиодов в ленте.

Функции

  • begin() - начало работы с лентой
  • numPixels() - возвращает количество светодиодов в ленте. Используется в циклах или при работе с несколькими светодиодными лентами
  • updateLength()
  • updateType()
  • show() - передаёт данные в ленту. Функцию необходимо вызывать каждый раз после того, как вы изменили цвета или настройки ленты
  • delay_ns()
  • setPin()
  • getPixelColor() - возвращает цвет светодиода в виде 32-битного числа. В единственном параметре функции указывается номер светодиода
  • setPixelColor() - задаёт цвет заданному светодиоду
  • fill()
  • ColorHSV()
  • setBrightness() - задаёт общую яркость светодиодной ленты. Не рекомендуется использовать при создании световых эффектов, следует вызывать её разово в функции setup(). Изменения вступают в силу только после вызова функции show()
  • getBrightness()
  • clear()
  • gamma32()

setPixelColor()

Функция 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

Реклама