Переключение с одного цвета на другой
Я использую светодиоды ws2812b 2x2 и переключаю их между зеленым и красным, но загорается только один из моих светодиодов на моем 2x2.
Я использую "мигающий" скетч FastLED с выводом данных 3 на моем Arduino Uno, определяющий светодиод 4.
void loop() {
// Включите светодиод, затем приостановите
leds[0] = CRGB::Red;
FastLED.show();
delay(5000);
// Теперь выключите светодиод, затем приостановите
leds[0] = CRGB::Green;
FastLED.show();
delay(5000);
}
@Darcy Billings, 👍2
Обсуждение2 ответа
Чтобы изменить цвет светодиода или заставить светиться любой другой светодиод, вы должны указать номер светодиода вместо светодиодов [номер светодиода]
в этом случае, чтобы ваш код в основном выглядел так.
void loop() {
// Включите светодиод, затем приостановите
leds[0] = CRGB::Red;
leds[1] = CRGB::Red;
leds[2] = CRGB::Red;
leds[3] = CRGB::Red;
FastLED.show();
delay(5000);
// Теперь выключите светодиод, затем приостановите
leds[0] = CRGB::Green;
leds[1] = CRGB::Green;
leds[2] = CRGB::Green;
leds[3] = CRGB::Green;
FastLED.show();
delay(5000);
}
Надеюсь, это поможет
Спасибо, ребята, я предполагал, что мой #define NUM_LEDS 4 заставит все 4 работать, но сейчас он делает то, что я хочу, большое спасибо, ребята, @Darcy Billings
Это дополнение к ответу xbox gamer (за который я проголосовал), чтобы предотвратить большое дублирование кода.
Для
цикла
Сначала мы видим, что 4 светодиода сделаны красными или зелеными (в следующем случае используется зеленый).:
leds[0] = CRGB::Green;
leds[1] = CRGB::Green;
leds[2] = CRGB::Green;
leds[3] = CRGB::Green;
Для этого можно использовать цикл for, считая от 0 до (исключая) 4:
for (led = 0; led < 4; led++)
{
leds[led] = CRGB::Green;
}
Вариант 1: Цветовой аргумент
Далее мы видим, что первая и последняя строки почти идентичны. Для этого мы можем создать функцию и изменить переменные элементы (например, цвет) с помощью переменной, переданной этой функции, которая называется аргументом:
Сначала мы создаем функцию цикла
:
void loop()
{
turnLEDs(CRGB::Red); // Включите светодиоды (т.е. Красный), затем сделайте паузу
turnLEDs(CRGB::Green); // Выключите светодиоды (т.е. Зеленый), затем сделайте паузу
}
Затем нам нужно создать только одну функцию для изменения цвета (поместите это перед функцией цикла
. Тип цвета - enum HTMLColorCode
, см. http://fastled.io/docs/3.1/struct_c_r_g_b.html.
void turnLEDs(enum HTMLColorCode color)
{
for (led = 0; led < 4; led++)
{
leds[led] = color;
}
FastLED.show();
delay(5000);
}
Вариант 2: Логический аргумент
Другой способ - не передавать цвет, а передавать ВКЛ или ВЫКЛ, что является логическим значением.
Для этого мы можем использовать так называемый троичный оператор: a ? b : c
, что означает: если a
истинно, используйте b
, в противном случае c
. Мы получаем:
void turnLEDs(bool enable)
{
for (led = 0; led < 4; led++)
{
leds[led] = enable ? CRGB::Red : CRGB::Green;
}
FastLED.show();
delay(5000);
}
void loop()
{
turnLEDs(true);
turnLEDs(false);
}
- Можно ли сделать FastLED быстрее?
- Arduino для запуска и светодиодная лента длиной до 100 м
- Arduino Uno R3, WS2812B, 1 полоса из 60 светодиодов, разделенная на 4
- Как обратиться к arbitray leds (WS2812B) в уже определенном массиве светодиодов?
- Источник питания WS2812B
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
Извините, я новичок, мой вопрос в том, почему только 1 из моих 4 светодиодов мигает, я что-то пропустил в коде., @Darcy Billings
ваш код мигает только одним светодиодом ... внимательно посмотрите на свой код ... посмотрите, сможете ли вы понять, как зажечь другой светодиод ... также посмотрите пример кода в arduino IDE, @jsotola