Переключение с одного цвета на другой

Я использую светодиоды 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);
}

, 👍2

Обсуждение

Извините, я новичок, мой вопрос в том, почему только 1 из моих 4 светодиодов мигает, я что-то пропустил в коде., @Darcy Billings

ваш код мигает только одним светодиодом ... внимательно посмотрите на свой код ... посмотрите, сможете ли вы понять, как зажечь другой светодиод ... также посмотрите пример кода в arduino IDE, @jsotola


2 ответа


5

Чтобы изменить цвет светодиода или заставить светиться любой другой светодиод, вы должны указать номер светодиода вместо светодиодов [номер светодиода] в этом случае, чтобы ваш код в основном выглядел так.

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


2

Это дополнение к ответу 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);
}
,