FastLED, WS2812B: Position Palette auf Strip je nach Wert verschieben.

Hallo,
ich habe ein Problem und finde irgendwie keine Lösung.
Ich habe einen LED-Strip mit 14 LEDs. Dazu habe ich eine Palette gebaut mit Rot, Gelb, Grün mit Noblend.

Ich habe Werte, die ich über die map-Funkion mappe. Aber ich möchte nicht den ganzen Strip in der Farbe verändern, sondern folgendes machen (siege Bild)

Ich möchte eine feste Palette haben, die ich fest auf dem Strip je nach Wert verschieben kann.

Folgenden Code habe ich, aber hier verändert sich halt immer der ganze Strip:

currentBlending = NOBLEND;
uint8_t brightness = 255;
CO2map = map(CO2, 0, 2000, 0, 255);

for(int i = 0; i < NUM_LEDS; i++) {
// fill_gradient_RGB(leds, NUM_LEDS, CRGB(0,255,0),CRGB(0,255,0),CRGB(0xFFA500), CRGB(255,0,0));
// leds[i] = ColorFromPalette( myPal, CO2map); // normal palette access
leds[i] = ColorFromPalette( myRedWhiteBluePalette_p, CO2map, brightness, currentBlending );

FastLED.show();
delay(50);
}
const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM =
{
  CRGB::Red,
  CRGB::Red, // 'white' is too bright compared to red and blue
  CRGB::Red,
  CRGB::Red,

  CRGB::Yellow,
   CRGB::Yellow,
  CRGB::Yellow,
  CRGB::Yellow,

  CRGB::Green,
  CRGB::Green,
  CRGB::Green,
  CRGB::Green,
  CRGB::Green,
  CRGB::Green,
  CRGB::Green,
  CRGB::Green
};

Die Farben definierst Du in einem Array zB array[14][3]. Einfach für jedes der 14 WS2812 die RGB Farbe ins Array schreiben.

Und dann einfach je nachdem welche LED eingeschaltet werden soll, holst Du die 3 RGB Werte des entsprechenden LEDs aus dem Array und setzt diese entsprechned ein.

Grüße Uwe

Puh, das hört sich aufwendig an. Mit Arrays habe ich noch nicht gearbeitet...

Heißt das, ich muss für 3x14 LEDs = 42 Arrays mit allen Möglichkeiten schreiben?

Es geht auch ohne Felder, getestet mit UNO und WS2815:

#include <FastLED.h>

FASTLED_USING_NAMESPACE

#define DATA_PIN    11
#define LED_TYPE    WS2812B       // WS2815 kennt meine FastLED-Version noch nicht
#define COLOR_ORDER GRB
#define NUM_LEDS    14
CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.show();
}

void loop()
{
  setzeFarbe(21);
  delay(2000);
  setzeFarbe(12);
  delay(2000);
  setzeFarbe(26);
  delay(2000);
}

void setzeFarbe(byte palPos) {
  for (byte led = 0; led < NUM_LEDS; led++) {
    if (palPos < NUM_LEDS) {
      leds[led] = CRGB::Red;
    }
    else if (palPos < 2 * NUM_LEDS) {
      leds[led] = CRGB::Yellow;
    }
    else {
      leds[led] = CRGB::Green;
    }
    palPos++;
  }
  FastLED.show(); // send the 'leds' array out to the actual LED strip
}

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.