Как добавить изменение цвета к стробоскопическому кодированию?

У меня этот стробоскопический эффект работает. Однако я хотел бы изменить цвет светодиодов после каждой "стробоскопической последовательности". Как этого можно достичь? Код, который я использую, это:

    // Basic code NeoPixel 
    // wwww.arduinoplatform.com
    
    #include <Adafruit_NeoPixel.h>
    #ifdef __AVR__
     #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
    #endif
    
    // Which pin on the Arduino is connected to the NeoPixels?
    // On a Trinket or Gemma we suggest changing this to 1:
    #define LED_PIN    6
    
    // How many NeoPixels ar
    Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, 6, NEO_GRB + NEO_KHZ800);
    
    void setup() {
      strip.begin();
      strip.show(); // Initialize all pixels to 'off'
    }
    
    // *** REPLACE FROM HERE ***
    
    void loop() {
      // Slower:
      // Strobe(0xff, 0x77, 0x00, 10, 100, 1000);
      // Fast:
      Strobe(0xFF, 0x00, 0xF8, 10, 50, 1000);
    }
    
    void Strobe(byte red, byte green, byte blue, int StrobeCount, int FlashDelay, int EndPause){
      for(int j = 0; j < StrobeCount; j++) {
        setAll(red,green,blue);
        showStrip();
        delay(FlashDelay);
        setAll(0,0,0);
        showStrip();
        delay(FlashDelay);
      }
     
     delay(EndPause);
    }
    
    // *** REPLACE TO HERE ***
    
    void showStrip() {
     #ifdef ADAFRUIT_NEOPIXEL_H
       // NeoPixel
       strip.show();
     #endif
     
    }
    
    void setPixel(int Pixel, byte red, byte green, byte blue) {
     #ifdef ADAFRUIT_NEOPIXEL_H
       // NeoPixel
       strip.setPixelColor(Pixel, strip.Color(red, green, blue));
     #endif
    }
    
    void setAll(byte red, byte green, byte blue) {
      for(int i = 0; i < 64; i++ ) {
        setPixel(i, red, green, blue);
      }
      showStrip();
    }

, 👍1

Обсуждение

измените первые три параметра в " Стробоскоп(0xFF, 0x00, 0xF8, 10, 50, 1000)";, @jsotola


1 ответ


1

Я думаю, вы хотите циклически перебирать список определенных цветов с помощью стробоскопического эффекта. Для этого вы можете сохранить цвета в 2-мерном массиве, а затем пройтись по нему циклом for. Затем 2-мерный массив представляет собой группу цветов, каждый из которых определяется 3 числами для значения RGB. Примерно так:

#define NUM_COLORS   5
byte colors[NUM_COLORS][3] = {
    {0xFF, 0, 0},
    {0, 0xFF, 0},
    {0, 0, 0xFF},
    {0xFF, 0xFF, 0},
    {0, 0xFF, 0xFF}
};

void loop(){
    for(int i=0;i<NUM_COLORS;i++){
        Strobe(colors[i][0], colors[i][1], colors[i][2], 10, 50, 1000);
    }
}

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

,