
Библиотека Adafruit NeoPixel служит для управления адресными RGB светодиодами на базе WS2811 и WS2812(B).
Скачать библиотеку Adafruit NeoPixel
Описание библиотеки Adafruit NeoPixel
#include <Adafruit_NeoPixel.h>
Подключение библиотеки.
Adafruit_NeoPixel(uint16_t n, uint8_t p=6, neoPixelType t=NEO_GRB + NEO_KHZ800)
Конструктор. Создает объект класса Adafruit_NeoPixel
для работы с адресными светодиодами.
- Параметр n определяет количество светодиодов в ленте;
- параметр p — номер контакта arduino, подключенный к первому светодиоду DIN;
- параметр neoPixelType состоит из двух параметров: первый, по умолчанию, NEO_GRB — порядок основных цветов в потоке данных (нужно изменить, в зависимости от типа и производителя LED); второй это NEO_KHZ800 — частота потока данных (также доступно частота 400 кГц для более «слабых» устройств: NEO_KHZ400).
Вариации порядка следования цветов:
#define NEO_RGB ((0 << 6) | (0 << 4) | (1 << 2) | (2)) // 0x06 #define NEO_RBG ((0 << 6) | (0 << 4) | (2 << 2) | (1)) // 0x09 #define NEO_GRB ((1 << 6) | (1 << 4) | (0 << 2) | (2)) // 0x52 #define NEO_GBR ((2 << 6) | (2 << 4) | (0 << 2) | (1)) // 0xA1 #define NEO_BRG ((1 << 6) | (1 << 4) | (2 << 2) | (0)) // 0x58 #define NEO_BGR ((2 << 6) | (2 << 4) | (1 << 2) | (0)) // 0xA4 #define NEO_WRGB ((0 << 6) | (1 << 4) | (2 << 2) | (3)) // 0x1B #define NEO_WRBG ((0 << 6) | (1 << 4) | (3 << 2) | (2)) // 0x1E #define NEO_WGRB ((0 << 6) | (2 << 4) | (1 << 2) | (3)) // 0x27 #define NEO_WGBR ((0 << 6) | (3 << 4) | (1 << 2) | (2)) // 0x36 #define NEO_WBRG ((0 << 6) | (2 << 4) | (3 << 2) | (1)) // 0x2D #define NEO_WBGR ((0 << 6) | (3 << 4) | (2 << 2) | (1)) // 0x39 #define NEO_RWGB ((1 << 6) | (0 << 4) | (2 << 2) | (3)) // 0x4B #define NEO_RWBG ((1 << 6) | (0 << 4) | (3 << 2) | (2)) // 0x4E #define NEO_RGWB ((2 << 6) | (0 << 4) | (1 << 2) | (3)) // 0x87 #define NEO_RGBW ((3 << 6) | (0 << 4) | (1 << 2) | (2)) // 0xC6 #define NEO_RBWG ((2 << 6) | (0 << 4) | (3 << 2) | (1)) // 0x8D #define NEO_RBGW ((3 << 6) | (0 << 4) | (2 << 2) | (1)) // 0xC9 #define NEO_GWRB ((1 << 6) | (2 << 4) | (0 << 2) | (3)) // 0x63 #define NEO_GWBR ((1 << 6) | (3 << 4) | (0 << 2) | (2)) // 0x72 #define NEO_GRWB ((2 << 6) | (1 << 4) | (0 << 2) | (3)) // 0x93 #define NEO_GRBW ((3 << 6) | (1 << 4) | (0 << 2) | (2)) // 0xD2 #define NEO_GBWR ((2 << 6) | (3 << 4) | (0 << 2) | (1)) // 0xB1 #define NEO_GBRW ((3 << 6) | (2 << 4) | (0 << 2) | (1)) // 0xE1 #define NEO_BWRG ((1 << 6) | (2 << 4) | (3 << 2) | (0)) // 0x6C #define NEO_BWGR ((1 << 6) | (3 << 4) | (2 << 2) | (0)) // 0x78 #define NEO_BRWG ((2 << 6) | (1 << 4) | (3 << 2) | (0)) // 0x9C #define NEO_BRGW ((3 << 6) | (1 << 4) | (2 << 2) | (0)) // 0xD8 #define NEO_BGWR ((2 << 6) | (3 << 4) | (1 << 2) | (0)) // 0xB4 #define NEO_BGRW ((3 << 6) | (2 << 4) | (1 << 2) | (0)) // 0xE4
Создание объекта класса: 16 светодиодов, управляющий контакт подключен к 6 контакту ардуино, порядок следования цветов: зеленый-красный-синий, частота передачи данных 800 кГц.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(16, 6, NEO_GRB + NEO_KHZ800);
void begin()
Инициализация библиотеки.
void setup() { pixels.begin(); }
void show()
Обновляет данные о цветах и настройки светодиодов.
pixels.setPixelColor(10, pixels.Color(150,150,150)); pixels.show();
void setPin(uint8_t p)
Изменяет номер контакта ардуино, подключенный к светодиодам.
pixels.setPin(7);
void setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b)
Устанавливает цвет светодиода.
- n — номер светодиода (начинается от 0);
- r (red) — количество красного цвета (8 бит, от 0x00 до 0xFF или от 0 до 255 );
- g (green) — количество зеленого цвета (8 бит, от 0x00 до 0xFF или от 0 до 255 );
- b (blue) — количество синего цвета (8 бит, от 0x00 до 0xFF или от 0 до 255 ).
pixels.setPixelColor(0, 255, 0, 0); // Красный pixels.setPixelColor(1, 0, 255, 0); // Зеленый pixels.setPixelColor(2, 0, 0, 255); // Синий pixels.setPixelColor(3, 255, 230, 0); // Желтый pixels.show(); delay(1000);
void setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b, uint8_t w)
Устанавливает цвет светодиода (для светодиодов RGBW — с четвертым белым светодиодом).
- n — номер светодиода (начинается от 0);
- r (red) — количество красного цвета (8 бит, от 0x00 до 0xFF или от 0 до 255);
- g (green) — количество зеленого цвета (8 бит, от 0x00 до 0xFF или от 0 до 255);
- b (blue) — количество синего цвета (8 бит, от 0x00 до 0xFF или от 0 до 255);
- w — количество белого цвета (8 бит, от 0x00 до 0xFF или от 0 до 255).
pixels.setPixelColor(0, 255, 0, 0, 100); pixels.setPixelColor(1, 0, 255, 0, 200); pixels.setPixelColor(2, 0, 0, 255, 123); pixels.setPixelColor(3, 255, 230, 0, 111); pixels.show(); delay(1000);
void setPixelColor(uint16_t n, uint32_t c)
Устанавливает цвет светодиода.
- n — номер светодиода (начинается от 0);
- c — цвет, представленный 24-мя битами ( от 0x000000 до 0xFFFFFF или от 0 до 16 777 215).
pixels.setPixelColor(0, 0xFF0000); // Красный pixels.setPixelColor(1, 0x00FF00); // Зеленый pixels.setPixelColor(2, 0x0000FF); // Синий pixels.setPixelColor(3, 0xFFE600); // Желтый pixels.show(); delay(1000);
void fill(uint32_t c=0, uint16_t first=0, uint16_t count=0)
Устанавливает заданный цвет c на количество светодиодов count начиная от светодиода first.
Например, установить 10 первых светодиодов в синий цвет можно так:
pixels.fill(0x0000FF, 0, 10); // Установить 10 светодиодов подряд в синий цвет начиная с 0 pixels.show(); // Обновить изменения delay(10000);
void setBrightness(uint8_t b)
Устанавливает значение яркости b. Может принимать значения от 0 до 255, где 0 — это отключить светодиоды, а 255 — максимальная яркость. После вызова метода setBrightness
необходимо обновить параметры светодиодов методом show
.
pixels.setBrightness(50); // Установить яркость в значение 50 pixels.fill(0x0000FF, 0, 10); // Установить 10 светодиодов подряд в синий цвет начиная с 0 pixels.show(); // Обновить изменения delay(3000); pixels.setBrightness(255); // Установить яркость в максимальное значение pixels.show(); // Обновить изменения delay(3000); pixels.setBrightness(0); // Установить яркость в 0, т.е. погасить LEDs pixels.show(); // Обновить изменения delay(2000);
void clear()
Отключает (очищает) все светодиоды. После вызова метода clear
необходимо вызвать метод show
.
void loop() { pixels.fill(0xFF0000, 0, 35); // Установить 35 светодиодов подряд в красный цвет начиная с 0 pixels.show(); // Обновить изменения delay(100); pixels.clear(); // Погасить светодиоды pixels.show(); // Обновить изменения delay(100); pixels.fill(0x00FF00, 0, 35); // Установить 35 светодиодов подряд в зеленый цвет начиная с 0 pixels.show(); // Обновить изменения delay(100); pixels.clear(); // Погасить светодиоды pixels.show(); // Обновить изменения delay(100); pixels.fill(0x0000FF, 0, 35); // Установить 35 светодиодов подряд в синий цвет начиная с 0 pixels.show(); // Обновить изменения delay(100); pixels.clear(); // Погасить светодиоды pixels.show(); // Обновить изменения delay(100); }
void updateLength(uint16_t n)
Изменяет количество светодиодов в ленте.
pixels.updateLength(30);
void updateType(neoPixelType t)
Изменяет тип светодиодов (порядок следования основных цветов и частоту потока данных).
pixels.updateType(NEO_RGB + NEO_KHZ400);
int8_t getPin()
Возвращает номер управляющего контакта ардуино, который был указан при инициализации объекта Adafruit_NeoPixel
или после изменен методом setPin
.
Serial.println(pixels.getPin());
uint16_t numPixels() const
Возвращает количество светодиодов указанных при инициализации или после изменен методом updateLength
.
Serial.println(pixels.numPixels());
static uint32_t Color(uint8_t r, uint8_t g, uint8_t b)
Преобразует 3 переменные по 8 бит (r
— красный от 0 до 255, g
— зеленный от 0 до 255, b
— синий от 0 до 255) в 32-х битную переменную.
uint32_t c = pixels.Color(20, 100, 167); Serial.println(c, HEX); // Результат: 1464A7
static uint32_t Color(uint8_t r, uint8_t g, uint8_t b, uint8_t w)
Преобразует 4 переменные по 8 бит (r
— красный от 0 до 255, g
— зеленный от 0 до 255, b
— синий от 0 до 255, w — белый от 0 до 255) в 32-х битную переменную.
uint32_t c = pixels.Color(20, 100, 167, 111); Serial.println(c, HEX); // Результат: 6F1464A7
uint32_t getPixelColor(uint16_t n) const
Возвращает 32-битную переменную, которая хранит цвет указанного светодиода n.
pixels.fill(0xFF0000, 0, 10); Serial.println(pixels.getPixelColor(5), HEX); // Выведет в порт FF0000 pixels.show(); delay(1000);