FastLED с WS2812B 241228

Привет, форум Arduino Stack Exchange,

Изучаем, как использовать FastLED для управления цепочкой из 150 светодиодов WS2812B

Приведенный ниже код компилируется и работает так, как и ожидалось.

Пытаюсь разобраться, как включить светодиоды разных цветов, скажем, чередование зеленого и красного.

Спасибо.

Аллен Питтс Даллас, Техас

P.S. Какой суффикс CRGB стоит перед тремя трехзначными числами, которые определяют цвет?

/*
from How To Control WS2812B Individually Addressable LEDs using Arduino
https://howtomechatronics.com/tutorials/arduino/how-to-control-ws2812b-individually-addressable-leds-using-arduino/
In this sketch first learned how to turn on twenty LEDs using statements for
each LED. Then figured out how to turn them off: "leds[i] = (0, 0, 0);"
The learned how to turn them on using FOR staement.
Next step Learn how to turn the LEDs on having different colors.

Last change:  NUM_LEDS to 150 and 
 for (int i = 0; i < 150; i++) {
    // turn off 
This works on the LED strip marked "Alito WS2812B"    

*/

#include <FastLED.h>

#define LED_PIN     3
#define NUM_LEDS    150

CRGB leds[NUM_LEDS];

void setup() {

  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  
}

void loop() {
 /*
  leds[0] = CRGB(255, 0, 0);
  FastLED.show();
  delay(100);  
  leds[1] = CRGB(0, 255, 0);
  FastLED.show();
  delay(100);
  leds[2] = CRGB(0, 0, 255);
  FastLED.show();
  delay(100);
  leds[3] = CRGB(150, 0, 255);
  FastLED.show();
  delay(100);
  leds[4] = CRGB(255, 200, 20);
  FastLED.show();
  delay(100);
  leds[5] = CRGB(85, 60, 180);
  FastLED.show();
  delay(100);
  leds[6] = CRGB(50, 255, 20);
  FastLED.show();
  leds[7] = CRGB(255, 0, 0);
  FastLED.show();
  delay(100);  
  leds[8] = CRGB(0, 255, 0);
  FastLED.show();
  delay(100);
  leds[9] = CRGB(0, 0, 255);
  FastLED.show();
  delay(100);
  leds[10] = CRGB(150, 0, 255);
  FastLED.show();
  delay(100);
  leds[11] = CRGB(255, 200, 20);
  FastLED.show();
  delay(100);
  leds[12] = CRGB(85, 60, 180);
  FastLED.show();
  delay(100);
  leds[13] = CRGB(50, 255, 20);
  FastLED.show();
  leds[14] = CRGB(0, 255, 0);
  FastLED.show();
  delay(100);
  leds[15] = CRGB(0, 0, 255);
  FastLED.show();
  delay(100);
  leds[16] = CRGB(150, 0, 255);
  FastLED.show();
  delay(100);
  leds[17] = CRGB(255, 200, 20);
  FastLED.show();
  delay(100);
  leds[18] = CRGB(85, 60, 180);
  FastLED.show();
  delay(100);
  leds[19] = CRGB(50, 255, 20);
  FastLED.show();
  */

  for (int i = 0; i < 60; i++) {
    // turn on
    leds[i] = CRGB(0, 255, 0);
    // Show the leds
    FastLED.show();
    delay(50);
  }
  for (int i = 0; i < 150; i++) {
    // turn off 
    leds[i] = CRGB(0, 0, 0);
    // Show the leds
    FastLED.show();
    delay(10);

  }
}

, 👍-1

Обсуждение

Что происходит при запуске кода?, @Nick Gammon

Массив leds[] — это *в памяти* представление реальных светодиодов... заполните массив значениями цветов, а затем вызовите FastLED.show();, чтобы скопировать массив в светодиодную ленту... ваш вопрос не об Arduino... это общий вопрос по программированию, @jsotola

исследуйте for (int i = 0; i < 150; i++) { ... узнайте, что он делает ... он находится в мире программирования на C++, @jsotola


1 ответ


0

CRGB, по-видимому, представляет собой структуру, которая по сути хранит значения красного, зеленого и синего для пикселя.

Из pixeltypes.h в библиотеке FastLED:

/// Представление пикселя RGB (красный, зеленый, синий)
struct CRGB {
    union {
        struct {
            union {
                uint8_t r;
                uint8_t red;
            };
            union {
                uint8_t g;
                uint8_t green;
            };
            union {
                uint8_t b;
                uint8_t blue;
            };
        };
        uint8_t raw[3];
    };

Что касается остальной части вашего вопроса, то там, по сути, нет вопроса. Чтобы получить ответ, вам нужно задать вопрос, указав:

  • Что вы пытались
  • То, чего вы ожидали
  • Что на самом деле произошло

Вы сказали:

Приведенный ниже код компилируется и работает так, как и ожидалось.

Поэтому дальше сложно двигаться. Код компилируется и работает, так в чём проблема?

,