Unterschiedliche WS2812 LED Konfigurationen gleichzeitig ansteuern

Guten Tag,

als absoluter Arduino-Neuling bin ich froh, diese Forum gefunden zu haben.

Ich habe mein PC-Gehäuse sowohl mit WS2812 LED Lüftern ausgestattet, die jeweils 12 LEDs besitzen, als auch mit einer WS2812 Kette am Chassis mit 2x54 LEDs.
Die Datenkabel der LEDs hängen an zwei verschiedenen Ports am Arduino (D5 und D6).
Die Spannungsversorgung erfolgt über das PC Netzteil.

Nun würde ich gerne beide “Längen” zusammen ansteuern, um Lauflicht- und RGB-Effekte gemeinsam darzustellen.

Meine Idee zum Ablauf ist:

  • erst 1x A ansteuern
  • dann 4x B ansteuern
  • das ganze 12 mal

Damit steuere ich zwar nur 48 der 54 LEDs an, was im ersten Schritt aber hinnehmbar wäre.

Bisher habe ich es jedoch nur geschafft, Beleuchtungseffekte, wie z.B. ein Lauflicht, “nacheinander” zu erzeugen. D.h. erst laufen die 12 Lüfter-LEDs, dann die Chassis-LEDs durch

Vielleicht denke ich hier auch zu kompliziert.
Ist so etwas überhaupt möglich?

Auf dem Bild im Anhang sind die 12er LEDs rot und die 54er LEDs blau markiert.

Ich hoffe, mich einigermaßen verständlich ausgedrückt zu haben.

Würde sagen:
delay() nicht benutzen. Stattdessen millis()
siehe Nachtwächtererklährung.
Grüße Uwe

@TO: Mal als Rückfrage. Die WS2812 haben ja auch hinten einen Dout. Kommst du an diesen bei den Lüftern ran? Dann könntest Du (wenn der Abstand nicht > 15 cm ist, sonst Dummy WS2812 dazwischen) alles als eine Kette schalten und so auch steuern.

Gruß Tommy

uwefed:
Würde sagen:
delay() nicht benutzen. Stattdessen millis()
siehe Nachtwächtererklährung.
Grüße Uwe

Guten Abend Uwe,

vielen Dank für den Denkanstoß. Mit der Nachtwächtererklärung (https://forum.arduino.cc/index.php?topic=423688.0) werde ich mich auseinandersetzen.

Tommy56:
@TO: Mal als Rückfrage. Die WS2812 haben ja auch hinten einen Dout. Kommst du an diesen bei den Lüftern ran? Dann könntest Du (wenn der Abstand nicht > 15 cm ist, sonst Dummy WS2812 dazwischen) alles als eine Kette schalten und so auch steuern.

Gruß Tommy

Hallo Tommy,

das würde ja dann auch eine "Hintereinanderreihung" ergeben. Eben diese möchte ich vermeiden. Ich würde gerne beide gleichzeitig ansteuern, sodass immer auf eine Lüfter-LED vier Case-LEDs kommen. Es ist schwierig in Worte zu fassen... Ich versuche, ein Video der aktuellen Konstellation beizufügen.

Ok, dann habe ich Dich falsch verstanden. Ich hatte das so verstanden, dass Du z.B. alles hintereinander als Lauflicht haben willst, inclusive der Lüfter.

Gruiß Tommy

Ich möchte die Effekte eben nicht hintereinander, sondern “gemeinsam” haben.
Hintereinander habe ich es so zusammengebastelt:

Teile davon sind aus dem Adafruit NeoPixel Beispiel:

#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel strip1(12, 5, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip2(54, 6, NEO_GRB + NEO_KHZ800);

void setup() {
 
  strip1.begin();     
  strip2.begin();     
  strip1.show();      
  strip2.show();          
  strip1.setBrightness(255);
  strip2.setBrightness(50); 
}



void loop() {
  colorWipe(strip1.Color(255,   0,   0), 50);
  colorWipe(strip1.Color(  0, 255,   0), 50);
  colorWipe(strip1.Color(  0,   0, 255), 50);

  colorWipe(strip2.Color(255,   0,   0), 50);
  colorWipe(strip2.Color(  0, 255,   0), 50); 
  colorWipe(strip2.Color(  0,   0, 255), 50); 
}

void colorWipe(uint32_t color, int wait) {
  for(int i=0; i<strip1.numPixels(); i++) { 
    strip1.setPixelColor(i, color);         
    strip1.show();                          
    delay(wait);                           
  }
  
  for(int i=0; i<strip2.numPixels(); i++) { 
    strip2.setPixelColor(i, color);         
    strip2.show();                          
    delay(wait);                         
  }
}

Das Video dazu befindet sich hier: - YouTube

Vielen Dank für die bisherige Hilfe!

Elektrisch alle WS2812 hintereinanderschalten und getrennt programmieren sind 2 Sachen die sich nicht ausschließen.
Du brauchst nur ab einer gewissen LED die Ansteuerung starten lassen.

zB
Lüfter1 von 0 bis 11,
Lüfter2 von 12 bis 23,
Lüfter3 von 24 bis 35,
Lüfter4 von 36 bis 47,
GehäuseA von 48 bis 101
GehäuseA von 102 bis 155.

Wenn Du den Lüfter3 animieren willst dann machst Du es mit den LED 24 bis 35.

Grüße Uwe

Hi

Was Du an die LEDs für Farben schickst - ist schnurz egal.
Erst das .show() schickt diese Daten wirklich an die LEDs raus.
Du kannst also ganz einfach Allen LEDs, Die Sich ändern sollen, die neue Farbe schicken und dann EIN .show() auslösen.

Wenn Du nun die LEDs am Lüfter alle 30ms 'weiterschaltest' und die LEDs im Gehäuse alle 102ms - dann bekommen Die immer noch bei jedem .show() Ihre (alte) Farbe, wenn sich Nichts geändert hat.
Jede LED ist einzeln ansprechbar - und dabei ist's den LEDs egal, ob Die davor/dahinter oder 200 Stück entfernt eine andere Farbe bekommt, oder nicht.

Wichtig: NICHT auf eine Zeit warten, sondern einfach NICHTS machen, wenn die Zeit noch nicht reif ist - Das ist der Konsens der Nachtwächter-Erklärung.

MfG