Блинк Adafruit_NeoPixel

Я хочу моргнуть всю полосу. В приведенном ниже коде просто мигает первый светодиод, как это исправить?

Код:

#include <Adafruit_NeoPixel.h>


#define PIN 6
#define NUM_LEDS 24


Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);


void setup() {
  strip.begin();
  strip.show();
}

void loop() {
  strip.setPixelColor(0, 255, 255, 255);
  strip.show();
  delay(1000);
  strip.setPixelColor(0, 0, 0, 0);
  strip.show();
  delay(1000);
}

, 👍0


1 ответ


Лучший ответ:

3

Первый аргумент setPixelColor — это номер светодиода. В вашем случае 0, значит первый светодиод.

Вместо этого используйте цикл for, чтобы установить все светодиоды от 0 до (исключая) 24 (которые хранятся в NUM_LEDS).

void loop()
{
  for (int led = 0; led < NUM_LEDS ; led++)
  {
    strip.setPixelColor(led, 255, 255, 255);
  }
  strip.show();
  delay(1000);

  for (int led = 0; led < NUM_LEDS ; led++)
  {
    strip.setPixelColor(led, 255, 255, 255);
  }
  strip.show();
  delay(1000);

Чтобы сделать код лучше (короче, но, что более важно, легче поддерживать и уменьшить дублирование кода), создайте отдельную функцию:

void loop() 
{
  setLeds(255);
  setLeds(0);
}

void setLeds(int intensity)
{
  for (int led = 0; led < NUM_LEDS ; led++)
  {
    strip.setPixelColor(led, intensity, intensity, intensity);
  }

  strip.show();
  delay(1000);
}
,

Спасибо. Я предполагаю, что в более длинном сценарии это должно быть strip.setPixelColor(led, 0, 0, 0);, @dkin

Да, потому что аргумент «интенсивность» определяет, когда используются значения 0 или 255., @Michel Keijzers