FastLED - Как управлять определенными светодиодами
Я, к сожалению, новичок в Arduino и FastLED. Я нашел хороший скетч, который почти идеально соответствует моим потребностям.
Только одна проблема:
Я не хочу, чтобы в Sketch ВСЕ светодиоды были одного цвета.
Я хочу, чтобы некоторые светодиоды были красными (например, светодиоды 0–4), некоторые зелеными, а другие синими.
Все они могут иметь одинаковый эффект и время, но было бы здорово, если бы я мог немного их рассинхронизировать.
Но было бы здорово иметь возможность делать разные светодиоды разного цвета. Вот скетч «Пульс» или «Дыхание», который я хочу использовать.
#include <FastLED.h>
#define NUM_LEDS 37
#define DATA_PIN 11
#define CLK_PIN 13
CRGB leds[NUM_LEDS];
int fadeAmount = 5; // Установите величину затухания. Обычно я делаю 5, 10, 15, 20, 25 и т. д., вплоть до 255.
int brightness = 0;
void setup()
{
FastLED.addLeds<APA102, DATA_PIN, CLK_PIN, BGR>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
FastLED.setBrightness(50);
}
void loop()
{
for(int i = 0; i < NUM_LEDS; i++ )
{
leds[i].setRGB(0,255,250); // Установите цвет ЗДЕСЬ!!!
leds[i].fadeLightBy(brightness);
}
FastLED.show();
brightness = brightness + fadeAmount;
// инвертируем направление затухания на концах затухания:
if(brightness == 0 || brightness == 255)
{
fadeAmount = -fadeAmount ;
}
delay(80); // Эта задержка устанавливает скорость затухания. Обычно я делаю от 5 до 75, но вы всегда можете подняться выше.
}
@tranceonline, 👍0
1 ответ
Лучший ответ:
Цвета светодиодов в вашем скетче задаются в этом цикле:
for(int i = 0; i < NUM_LEDS; i++ )
{
leds[i].setRGB(0,255,250); // Установите цвет ЗДЕСЬ!!!
leds[i].fadeLightBy(brightness);
}
Вы перебираете все светодиоды и устанавливаете для них определенный цвет и яркость. Изменения будут отправлены светодиодам, когда вы впоследствии вызовете FastLED.show()
. Никто не мешает вам установить разный цвет для каждого светодиода или изменить значение только для некоторых светодиодов.
Например, чтобы зажечь первые 5 светодиодов красным цветом, следующие 10 - зеленым, а остальные оставить такими, какими они были раньше, вы можете использовать этот код (просто замените его циклом for
) :
for(int i=0;i<5;i++){
leds[i].setRGB(255,0,0);
leds[i].fadeLightBy(brightness);
}
for(int i=5;i<15;i++){
leds[i].setRGB(0,255,0);
leds[i].fadeLightBy(brightness);
}
FastLED.show();
Принцип заключается в том, что у вас есть массив значений цветов. Каждое значение состоит из трех меньших значений для красного, зеленого и синего (RGB) (Цвет определяется распределением между красным, зеленым и синим ; яркость определяется общим уровнем красного, зеленого и синего). И каждое значение массива привязано к светодиоду (первое значение — к первому светодиоду, второе значение — ко второму светодиоду,...). Вы можете изменить значения цветов в массиве по своему усмотрению. А если вы хотите, чтобы светодиоды отображали текущие значения в массиве, вы отправляете их с помощью FastLED.show()
. Это означает, что вам придется вызывать эту функцию каждый раз, когда вы хотите, чтобы светодиоды менялись. Чтобы это работало, вам не обязательно менять каждое значение в массиве.
Если вы хотите создать асинхронное изменение цветов, вы можете отказаться от delay(80)
и использовать неблокирующий код, как в примере BlinkWithoutDelay
Ардуино IDE. Здесь вы используете функцию millis()
в качестве часов (она возвращает миллисекунды с момента запуска Arduino). Вы берете временную метку вначале и сравниваете разницу между ней и текущим временем:
unsigned long timestamp=0;
unsigned long interval=80; //интервал 80 миллисекунд
void loop(){
unsigned long current_time=millis();
if(current_time - timestamp > interval){
// делаем что-то здесь, например устанавливаем цвета светодиодов
timestamp = current_time;
// не забудьте FastLED.show() для вывода цветов
}
}
Вы можете использовать несколько таких временных меток с операторами if, по одной для каждого сегмента, который вы хотите изменить, с разной частотой.
- Питание светодиодной ленты - Сколько ампер?
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Светодиод L продолжает гореть
- Улучшенное циклическое переключение цветов RGB.
- Плавное мигание светодиодов
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
Привет, вау! Я просто поражен тем, как хорошо вы мне все это объяснили и показали! Отлично! Я обязательно попробую это, когда буду дома с работы и оставлю отзыв. Большое спасибо !, @tranceonline
ВАУ, это сработало идеально! Еще раз: Спасибо большое!!!, @tranceonline