Передача цвета функции без использования определенного Adafruit_NeoPixel

Я инициализирую свои полосы в виде массива:

// Declare NeoPixel strip array:
Adafruit_NeoPixel strip[] = {
  Adafruit_NeoPixel(LED_COUNT[0], LED_PIN[0], NEO_RGBW + NEO_KHZ800),
  Adafruit_NeoPixel(LED_COUNT[1], LED_PIN[1], NEO_RGBW + NEO_KHZ800),
  Adafruit_NeoPixel(LED_COUNT[2], LED_PIN[2], NEO_RGBW + NEO_KHZ800),
  Adafruit_NeoPixel(LED_COUNT[3], LED_PIN[3], NEO_RGBW + NEO_KHZ800),
  Adafruit_NeoPixel(LED_COUNT[4], LED_PIN[4], NEO_RGBW + NEO_KHZ800)
};

и когда я передаю цвет функции, я произвольно использую свою первую полосу для создания цвета:

  everyother( strip[0].Color( 0, 255, 0), strip[0].Color( 255, 0, 0), 500);

но в подпрограмме я использую эти цвета для установки пикселей для каждой полосы массива в цикле:

// установите для всех остальных цветов значение color1 или color2
void everyother( uint32_t color1, uint32_t color2, int wait) {
  for(int k=0; k<NUM_STRIPS; k++) {
    for( int j=0; j<LED_COUNT[k]; j++) {
      if( j%2 == 0) strip[k].setPixelColor(j, color1);
      else strip[k].setPixelColor(j, color2);
    }
  }
  for(int k=0; k<NUM_STRIPS; k++) strip[k].show();  
  delay(wait);
}

Есть ли другой способ определить цвет, который не использует реальный Adafruit_NeoPixel? Да, это работает таким образом, но кажется небрежным.

, 👍3


1 ответ


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

2

Глядя на библиотеку в https://github.com/adafruit/Adafruit_NeoPixel/blob/master/Adafruit_NeoPixel.h, вы можете видеть, что метод Color является статическим (см. Строку 307):

static uint32_t   Color(uint8_t r, uint8_t g, uint8_t b) {
  return ((uint32_t)r << 16) | ((uint32_t)g <<  8) | b;

Это означает, что вместо

strip[0].Color( 0, 255, 0)

Вы можете использовать:

Adafruit_NeoPixel::Color( 0, 255, 0)

Ваш призыв ко всем остальным будет звучать так:

everyother(Adafruit_NeoPixel::Color( 0, 255, 0),
           Adafruit_NeoPixel::Color( 255, 0, 0), 
           500);

И поскольку everyother теперь не является хорошим именем, вы можете придумать лучшее, например, fillLeds (всегда начинайте имя метода с глагола).

Оффтопик:

  • Подпрограмма больше почти не используется, я думаю, что в последний раз, когда я ее слышал, она была взята из базового языка программирования
  • Вместо этого теперь используется функция
  • Но когда функция находится внутри класса, она называется не функцией, а вызываемым методом.
,

Спасибо за ответ. Я знал, что это будет что-то простое, чего мне не хватало. И спасибо за советы. Если вам нужна помощь в написании сборки для VAX, свяжитесь со мной., @Johnny Rollerfeet

@JohnnyRollerfeet ... всегда пожалуйста... У меня нет VAX под рукой, лол, но на случай, если я его увижу, я знаю, кому позвонить. Теперь я также знаю, почему вы использовали термин подпрограмма. Удачи вам в вашем проекте., @Michel Keijzers