Привет! Сегодня мы посмотрим на умные светодиоды. Они же адресные светодиоды и они же неопиксели (NeoPixel). Они могут быть как в виде ленты, так и в виде, представленном на фото ниже.
Светодиоды обычно маркируются WS2812B.
Перейдем к самому проекту. Попробуем сделать радугу в Тинкеркаде. Там есть готовый набор и мы этим воспользуемся.
Перетащим NeoPixel на рабочее пространство. Код будет создан автоматически, но мы напишем свой.
В этом проекте нам потребуется подключить библиотеку Adafruit NeoPixel, которая применяется для управления адресной светодиодной лентой. Библиотеки нужны для упрощения как кода, так и программного подключения датчиков и модулей. Пока это выглядит сложно, но будем разбираться по порядку.
Наш код:
#include <Adafruit_NeoPixel.h> //подключение библиотеки
#define PIN 2 //пин, к которому подключена лента
#define NUMPIXELS 12 //количество светодиодов
int r=0;
int g=0;
int b=0;
//в следующей строке "передаем" значения библиотеке
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); //создаем переменную pixels и передаем NUMPIXELS и PIN
void setup() {
pixels.begin(); //запускаем подключение
}
void loop() {
for (int color = 0; color < 8; color++) { //цикл смены цвета
switch(color){
case 0: r=255; g=0; b=0; break; //красный
case 1: r=255; g=125; b=0; break; //оранжевый
case 2: r=255; g=255; b=0; break; //желтый
case 3: r=0; g=255; b=0; break; //зеленый
case 4: r=0; g=255; b=255; break; //голубой
case 5: r=0; g=0; b=255; break; //синий
case 6: r=255; g=0; b=255; break; //фиолетовый
case 7: r=0; g=0; b=0; break; //выключить
}
for (int i = 0; i < NUMPIXELS; i++) { //цикл для неопикселей
pixels.setPixelColor(i, pixels.Color(r, g, b));
}
pixels.show();
delay(1000); //ждем секунду
}
}
В строке pixels.setPixelColor(i, pixels.Color(r, g, b)) мы передаем значение цвета для каждого светодиода (i от 0 до 23). Примерно так: "Нулевой, на тебе красный. Первый, а тебе... тоже красный" и так далее. RGB (аббревиатура английских слов red, green, blue — красный, зелёный, синий) - аддитивная цветовая модель, описывающая способ кодирования цвета для цветовоспроизведения с помощью трёх цветов, которые принято называть основными. Соответственно, r - это количество красного от 0 до 255, g - это количество зеленого от 0 до 255, b - это количество синего от 0 до 255.
pixels.show() - эту строчку можно воспринимать как "Выполни!" или "Покажи!". Когда мы раздали каждому светодиоду (Нулевому, Первому, Второму... Двадцать Четвертому) тот цвет, который хотим, мы говорим всем им: "Покажи!". Следует обратить внимание, что эта строчка у нас вынесена за цикл (for (int i = 0; i < NUMPIXELS; i++)), что означает, что лента будет окрашена в цвет вся целиком. Если мы добавим 2 строчки (pixels.show() и delay(1000)) в цикл, то мы увидим как каждый светодиод будет загораться нужным цветом.
В следующих статьях мы разберем код, который в проекте появляется по умолчанию (он немножко сложненький!), и соберем проект "в железе" (он ооочень яркий!).
До новых встреч!