Китайская промышленность выпускает несколько типов светодиодов, светодиодных лент и микросхем для адресного управления каждым RGB светодиодом в цепочке. Микросхема управления может быть как в DIP или SMD корпусе, так и встроенная в светодиод.
Отличительной особенностью адресуемых светодиодов является трёхпроводное (+VCC, GND и DATA) подключение или четырёх проводное (+VCC, GND, DATA и CLOCK) подключение. Сигнал DATA - управление светодиодом, подключается к контакту DIN. Со светодиода уходит сигнал DOUT и подключается к следующему светодиоду к контакту DIN. То есть, сигнал управления передаётся от светодиода к светодиоду по цепочке. Каждому светодиоду предназначено 24 бита данных. 224 = 16777216 цветов. Существует сигнал RESET, который распространяется между всеми светодиодами одновременно. После сигнала RESET первый светодиод в цепочке забирает (отнимает) свои 24 бита данных а остальные биты c линии DIN передаёт на в DOUT для других светодиодов. И так поступает каждый светодиод в цепи. Адресация оказывается совсем не сложной.
Приведём пример программы Blink для одного светодиода:
#include <FastLED.h>
#define NUM_LEDS 1 // Количество светодиодов в ленте
#define DATA_PIN 12 // Для светодиодов с тремя проводами +, - и DATA необходимо выбрать только DATA_PIN
#define CLOCK_PIN 13 // Для светодиодов с четырьмя проводами +, -, DATA и CLOCK дополнительно выбираем CLOCK_PIN
CRGB leds[NUM_LEDS]; // Определяем массив светодиодов
void setup() {
// Раскомментируйте одну из следующих строк в соответствии с типом светодиода
// ## Clockless types ##
// FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS); // GRB ordering is assumed
// FastLED.addLeds<SM16703, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<TM1829, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<TM1812, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<TM1809, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<TM1804, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<TM1803, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<UCS1903, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<UCS1903B, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<UCS1904, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<UCS2903, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2852, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<GS1903, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<SK6812, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<SK6822, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<APA106, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<PL9823, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<SK6822, DATA_PIN, RGB>(leds, NUM_LEDS);
FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2813, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<APA104, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2811_400, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<GE8822, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<GW6205, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<GW6205_400, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<LPD1886, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<LPD1886_8BIT, DATA_PIN, RGB>(leds, NUM_LEDS);
// ## Clocked (SPI) types ##
// FastLED.addLeds<LPD6803, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<LPD8806, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2803, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<SM16716, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<P9813, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<DOTSTAR, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<APA102, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<SK9822, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
}
void loop() {
leds[0] = CRGB::Green; // Выбор цвета
FastLED.show();
delay(300);
leds[0] = CRGB::Black; // Выбор цвета
FastLED.show();
delay(100);
leds[0] = CRGB::Blue; // Выбор цвета
FastLED.show();
delay(300);
leds[0] = CRGB::Black; // Выбор цвета
FastLED.show();
delay(100);
leds[0] = CRGB::Red; // Выбор цвета
FastLED.show();
delay(300);
leds[0] = CRGB::Black; // Выбор цвета
FastLED.show();
delay(100);
}
Программа использует библиотеку FastLED. В функции setup() Вы видите большой перечень типов светодиодов.
Подключение светодиода очень простое, на VCC и GND светодиода подайте питание на D или DIN подайте сигнал с Arduino.Pin на плате Arduino определён в программе в строке #define DATA_PIN 12. Само собой разумеется, GND Arduino и GND светодиода должны быть соединены.