Передача цвета функции без использования определенного 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? Да, это работает таким образом, но кажется небрежным.
1 ответ
Лучший ответ:
Глядя на библиотеку в 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
(всегда начинайте имя метода с глагола).
Оффтопик:
- Подпрограмма больше почти не используется, я думаю, что в последний раз, когда я ее слышал, она была взята из базового языка программирования
- Вместо этого теперь используется функция
- Но когда функция находится внутри класса, она называется не функцией, а вызываемым методом.
- Создать 7 сегментный дисплей из управляемых светодиодных полос для отображения цифр
- Мой моторный щит сломан?
- игнорирование изменений значения потенциометра
- Быстрое изменение цвета в состоянии удержания
- Светодиодное кольцо с различными эффектами циклически
- Печать string and integer LCD
- Почему мои часы реального времени показывают неверное время с моего ПК?
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
Спасибо за ответ. Я знал, что это будет что-то простое, чего мне не хватало. И спасибо за советы. Если вам нужна помощь в написании сборки для VAX, свяжитесь со мной., @Johnny Rollerfeet
@JohnnyRollerfeet ... всегда пожалуйста... У меня нет VAX под рукой, лол, но на случай, если я его увижу, я знаю, кому позвонить. Теперь я также знаю, почему вы использовали термин подпрограмма. Удачи вам в вашем проекте., @Michel Keijzers