Projekt mit meheren WS2812B Streifen

Hallo miteinander,

Ich unterstütze einen Freund grade bei einem Projekt. Und zwar sollen mehrere Stripes mit einem Arduino gesteuert werden. Da ich aber 150 km weit weg wohne passiert das meiste per Post, Bildern, und Ferndiagnose.
Da ich überall nur Anleitungen finde wie man einen steuert und das Projekt weit größer wird, wollt ich hier nochmal fragen ob wir das so durchziehen können, oder ob ich wichtige Sachen übersehe.

Insgesammt werden 16 Stripes verbaut.
Das Ganze wird durch 2 5V 80A Netzteile gespeißt.
Diese gehen mit jeweils 3x6mm² auf Kupfer Schienen. Die Masse der beiden Netzteile geht auf eine große gemeinsame Schiene. Also 6 Kabel pro NT
Die einzelnen Stripes werden mit 2,5 mm² Kabel angeschlossen.
Jede 5V Leitung wird durch eine Sicherung geschützt.
Da hätte ich den verbrauch der einzelnen Stripes errechnet und 5A drauf geschlagen.

Die Steuerung übernimmt ein Mega für den ich ein einfaches Shield gebastelt hab mit 470 Ohm Widerständen und Klemmanschlüssen für die die Datenleitungen der Stripes und Strom.

Was ich nicht ganz verstehe ist der Kondensator den ich verbauen muß.
Braucht da jeder Stripe seinen eigenen, oder reicht es wenn jeweils ein großer zwischen den Stromschienen Hängt?
An den Spripes direkt kann ich sie nicht anbringen, da alles später auf ner Mechanik wasserdicht verbaut werden soll.
Daher müssen die im Steuerpult reichen.

Und reicht es wenn ich ein USB Kabel mit unterbrochener 5V leitung mache und das zum einspielen neuer Sketche nehm?

Und zu guter letzt mal ein Sketch den ich mir aus dem RGBWStrandtest gebastelt hab.
Erstmal nur um zu sehen, ob das so alles funktioniert.

#include <Adafruit_NeoPixel.h>

#define PIN1 2
#define PIN2 14
#define PIN3 15
#define PIN4 16
#define PIN5 17
#define PIN6 18
#define PIN7 19
#define PIN8 20

#define NUM_LEDS1 250
#define NUM_LEDS2 250
#define NUM_LEDS3 130
#define NUM_LEDS4 130
#define NUM_LEDS5 130
#define NUM_LEDS6 130
#define NUM_LEDS7 130
#define NUM_LEDS8 130
#define BRIGHTNESS 50

#define BRIGHTNESS 50

Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUM_LEDS1, PIN1, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(NUM_LEDS2, PIN2, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(NUM_LEDS3, PIN3, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip4 = Adafruit_NeoPixel(NUM_LEDS4, PIN4, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip5 = Adafruit_NeoPixel(NUM_LEDS5, PIN5, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip6 = Adafruit_NeoPixel(NUM_LEDS6, PIN6, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip7 = Adafruit_NeoPixel(NUM_LEDS7, PIN7, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip8 = Adafruit_NeoPixel(NUM_LEDS8, PIN8, NEO_GRBW + NEO_KHZ800);

byte neopix_gamma[] = {
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,
    1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  2,  2,  2,  2,  2,  2,
    2,  3,  3,  3,  3,  3,  3,  3,  4,  4,  4,  4,  4,  5,  5,  5,
    5,  6,  6,  6,  6,  7,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10,
   10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16,
   17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25,
   25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36,
   37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50,
   51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68,
   69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89,
   90, 92, 93, 95, 96, 98, 99,101,102,104,105,107,109,110,112,114,
  115,117,119,120,122,124,126,127,129,131,133,135,137,138,140,142,
  144,146,148,150,152,154,156,158,160,162,164,167,169,171,173,175,
  177,180,182,184,186,189,191,193,196,198,200,203,205,208,210,213,
  215,218,220,223,225,228,231,233,236,239,241,244,247,249,252,255 };

void setup() {

strip1.setBrightness(BRIGHTNESS);
  strip1.begin();
  strip1.show(); // Initialize all pixels to 'off'
strip2.setBrightness(BRIGHTNESS);
  strip2.begin();
  strip2.show(); // Initialize all pixels to 'off'  
strip3.setBrightness(BRIGHTNESS);
  strip3.begin();
  strip3.show(); // Initialize all pixels to 'off'  
strip4.setBrightness(BRIGHTNESS);
  strip4.begin();
  strip4.show(); // Initialize all pixels to 'off'
strip5.setBrightness(BRIGHTNESS);
  strip5.begin();
  strip5.show(); // Initialize all pixels to 'off'
strip6.setBrightness(BRIGHTNESS);
  strip6.begin();
  strip6.show(); // Initialize all pixels to 'off'  
strip7.setBrightness(BRIGHTNESS);
  strip7.begin();
  strip7.show(); // Initialize all pixels to 'off'  
strip8.setBrightness(BRIGHTNESS);
  strip8.begin();
  strip8.show(); // Initialize all pixels to 'off'



}

void loop() {
  pulseWhite(5); 
}
void pulseWhite(uint8_t wait) {
  for(int j = 0; j < 256 ; j++){
      for(uint16_t i=0; i<strip1.numPixels(); i++) {
          strip1.setPixelColor(i, strip1.Color(0,0,0, neopix_gamma[j] ) );
          strip2.setPixelColor(i, strip2.Color(0,0,0, neopix_gamma[j] ) );
          strip3.setPixelColor(i, strip3.Color(0,0,0, neopix_gamma[j] ) );
          strip4.setPixelColor(i, strip4.Color(0,0,0, neopix_gamma[j] ) );
          strip5.setPixelColor(i, strip5.Color(0,0,0, neopix_gamma[j] ) );
          strip6.setPixelColor(i, strip6.Color(0,0,0, neopix_gamma[j] ) );
          strip7.setPixelColor(i, strip7.Color(0,0,0, neopix_gamma[j] ) );
          strip8.setPixelColor(i, strip8.Color(0,0,0, neopix_gamma[j] ) );
        }
        delay(wait);
        strip1.show();
        strip2.show();
        strip3.show();
        strip4.show();
        strip5.show();
        strip6.show();
        strip7.show();
        strip8.show();
      }

  for(int j = 255; j >= 0 ; j--){
      for(uint16_t i=0; i<strip1.numPixels(); i++) {
          strip1.setPixelColor(i, strip1.Color(0,0,0, neopix_gamma[j] ) );
          strip2.setPixelColor(i, strip2.Color(0,0,0, neopix_gamma[j] ) );
          strip3.setPixelColor(i, strip3.Color(0,0,0, neopix_gamma[j] ) );
          strip4.setPixelColor(i, strip4.Color(0,0,0, neopix_gamma[j] ) );
          strip5.setPixelColor(i, strip5.Color(0,0,0, neopix_gamma[j] ) );
          strip6.setPixelColor(i, strip6.Color(0,0,0, neopix_gamma[j] ) );
          strip7.setPixelColor(i, strip7.Color(0,0,0, neopix_gamma[j] ) );
          strip8.setPixelColor(i, strip8.Color(0,0,0, neopix_gamma[j] ) );
        }
        delay(wait);
        strip1.show();
        strip2.show();
        strip3.show();
        strip4.show();
        strip5.show();
        strip6.show();
        strip7.show();
        strip8.show();
      }
}

Wäre super wenn jemand mit mehr Hintergrund im Thema was zu dem Projekt sagen kann.
Nächste Woche soll es nämlich alles ans laufen kommen.

Kadara:
Da ich aber 150 km weit weg wohne passiert das meiste per Post, Bildern, und Ferndiagnose.
...
Nächste Woche soll es nämlich alles ans laufen kommen.

Buche Dir ein Hotelzimmer!

Kadara:
Da ich überall nur Anleitungen finde wie man einen steuert und das Projekt weit größer wird, wollt ich hier nochmal fragen ob wir das so durchziehen können, oder ob ich wichtige Sachen übersehe.

Grundsätzlich geht das so, wobei ich die Stromversorgung nicht einzeln nachgerechnet habe.
1280 Lichtpunkte * 4 LEDs * 20 mA = 102,4 A < 160 A

Kadara:
Und reicht es wenn ich ein USB Kabel mit unterbrochener 5V leitung mache und das zum einspielen neuer Sketche nehm?

Ja.

Kadara:
Und zu guter letzt mal ein Sketch den ich mir aus dem RGBWStrandtest gebastelt hab.

Die Pindefinitionen geben Warnungen, bitte schalte in der IDE die Ausgabe der Warnungen ein.

freeMemory()=2411

agmue:
Buche Dir ein Hotelzimmer!

Ich hab halt nicht die Zeit und der Gute ist so motiviert das ganze ans laufen zu kriegen, daß er wohl selbst ran muß. Aber was ich ihm sende sollte halbwegs funktionieren, erstmal.
Und ich hab halt noch nie was in der Richtung gemacht, und bin recht unsicher in vielen Punkten.
Und man ließt ja viel über Probleme, wenn was nicht stimmt bei neopixeln.
Ein wenig eingelesen hab ich mich, aber kann ohne daß ich nen Stripe da hab nix probieren.

agmue:
Grundsätzlich geht das so, wobei ich die Stromversorgung nicht einzeln nachgerechnet habe.
1280 Lichtpunkte * 4 LEDs * 20 mA = 102,4 A < 160 A

Strom haben wir genug. Da mach ich mir keine Sorgen. Ingesamt sind es 6 5m Streifen.
Viele Stripes werden nur 1.20m-1.40m lang.
Sind mit 80W angegeben.
Also 460W. Wir haben 800Wzur verfügung.
Luft nach oben is da nie verkehrt.

agmue:
Die Pindefinitionen geben Warnungen, bitte schalte in der IDE die Ausgabe der Warnungen ein.

freeMemory()=2411

Kannst du mir bitte mal auf die Sprünge helfen?
Wo kann ich da noch was einstellen?
Ich kann die detailiertie Ausgabe einschalten. Aber ich find nirgends die Fehlermeldung.

Ok ich habs gefunden. War blind.
Er wollte die definition nicht.
So will er sie.
Aber was du mit freememory meinst find ich nicht.
Ich krieg nur noch die Meldung:
Der Sketch verwendet 4278 Bytes (1%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 443 Bytes (5%) des dynamischen Speichers, 7749 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.

#include <Adafruit_NeoPixel.h>


#define PIN_1 2
#define PIN_2 14
#define PIN_3 15
#define PIN_4 16
#define PIN_5 17
#define PIN_6 18
#define PIN_7 19
#define PIN_8 20

#define NUM_LEDS1 250
#define NUM_LEDS2 250
#define NUM_LEDS3 130
#define NUM_LEDS4 130
#define NUM_LEDS5 130
#define NUM_LEDS6 130
#define NUM_LEDS7 130
#define NUM_LEDS8 130
#define BRIGHTNESS 50

#define BRIGHTNESS 50

Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUM_LEDS1, PIN_1, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(NUM_LEDS2, PIN_2, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(NUM_LEDS3, PIN_3, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip4 = Adafruit_NeoPixel(NUM_LEDS4, PIN_4, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip5 = Adafruit_NeoPixel(NUM_LEDS5, PIN_5, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip6 = Adafruit_NeoPixel(NUM_LEDS6, PIN_6, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip7 = Adafruit_NeoPixel(NUM_LEDS7, PIN_7, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip8 = Adafruit_NeoPixel(NUM_LEDS8, PIN_8, NEO_GRBW + NEO_KHZ800);

byte neopix_gamma[] = {
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,
    1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  2,  2,  2,  2,  2,  2,
    2,  3,  3,  3,  3,  3,  3,  3,  4,  4,  4,  4,  4,  5,  5,  5,
    5,  6,  6,  6,  6,  7,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10,
   10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16,
   17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25,
   25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36,
   37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50,
   51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68,
   69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89,
   90, 92, 93, 95, 96, 98, 99,101,102,104,105,107,109,110,112,114,
  115,117,119,120,122,124,126,127,129,131,133,135,137,138,140,142,
  144,146,148,150,152,154,156,158,160,162,164,167,169,171,173,175,
  177,180,182,184,186,189,191,193,196,198,200,203,205,208,210,213,
  215,218,220,223,225,228,231,233,236,239,241,244,247,249,252,255 };

void setup() {

strip1.setBrightness(BRIGHTNESS);
  strip1.begin();
  strip1.show(); // Initialize all pixels to 'off'
strip2.setBrightness(BRIGHTNESS);
  strip2.begin();
  strip2.show(); // Initialize all pixels to 'off'  
strip3.setBrightness(BRIGHTNESS);
  strip3.begin();
  strip3.show(); // Initialize all pixels to 'off'  
strip4.setBrightness(BRIGHTNESS);
  strip4.begin();
  strip4.show(); // Initialize all pixels to 'off'
strip5.setBrightness(BRIGHTNESS);
  strip5.begin();
  strip5.show(); // Initialize all pixels to 'off'
strip6.setBrightness(BRIGHTNESS);
  strip6.begin();
  strip6.show(); // Initialize all pixels to 'off'  
strip7.setBrightness(BRIGHTNESS);
  strip7.begin();
  strip7.show(); // Initialize all pixels to 'off'  
strip8.setBrightness(BRIGHTNESS);
  strip8.begin();
  strip8.show(); // Initialize all pixels to 'off'



}

void loop() {
  pulseWhite(5); 
}
void pulseWhite(uint8_t wait) {
  for(int j = 0; j < 256 ; j++){
      for(uint16_t i=0; i<strip1.numPixels(); i++) {
          strip1.setPixelColor(i, strip1.Color(0,0,0, neopix_gamma[j] ) );
          strip2.setPixelColor(i, strip2.Color(0,0,0, neopix_gamma[j] ) );
          strip3.setPixelColor(i, strip3.Color(0,0,0, neopix_gamma[j] ) );
          strip4.setPixelColor(i, strip4.Color(0,0,0, neopix_gamma[j] ) );
          strip5.setPixelColor(i, strip5.Color(0,0,0, neopix_gamma[j] ) );
          strip6.setPixelColor(i, strip6.Color(0,0,0, neopix_gamma[j] ) );
          strip7.setPixelColor(i, strip7.Color(0,0,0, neopix_gamma[j] ) );
          strip8.setPixelColor(i, strip8.Color(0,0,0, neopix_gamma[j] ) );
        }
        delay(wait);
        strip1.show();
        strip2.show();
        strip3.show();
        strip4.show();
        strip5.show();
        strip6.show();
        strip7.show();
        strip8.show();
      }

  for(int j = 255; j >= 0 ; j--){
      for(uint16_t i=0; i<strip1.numPixels(); i++) {
          strip1.setPixelColor(i, strip1.Color(0,0,0, neopix_gamma[j] ) );
          strip2.setPixelColor(i, strip2.Color(0,0,0, neopix_gamma[j] ) );
          strip3.setPixelColor(i, strip3.Color(0,0,0, neopix_gamma[j] ) );
          strip4.setPixelColor(i, strip4.Color(0,0,0, neopix_gamma[j] ) );
          strip5.setPixelColor(i, strip5.Color(0,0,0, neopix_gamma[j] ) );
          strip6.setPixelColor(i, strip6.Color(0,0,0, neopix_gamma[j] ) );
          strip7.setPixelColor(i, strip7.Color(0,0,0, neopix_gamma[j] ) );
          strip8.setPixelColor(i, strip8.Color(0,0,0, neopix_gamma[j] ) );
        }
        delay(wait);
        strip1.show();
        strip2.show();
        strip3.show();
        strip4.show();
        strip5.show();
        strip6.show();
        strip7.show();
        strip8.show();
      }
}

Hi

Der Sketch sollte so funktionieren.
Sieht aber *** aus :slight_smile:
Alles, was Du mehrfach machst, kann man zusammen fassen.
Auch kann ich mir kaum vorstellen, daß sämtliche LEDs später die gleiche Farbe zeigen sollen - Das wäre wesentlich billiger mit Baumarkt-Ware gegangen - Die gibt's ebenfalls direkt in Wasserdicht.

Wenn Du also später 'MEHR' machen willst, stören mich die delay() in Deinem Sketch.
Auch, daß Du ERST wartest, bevor Du die Daten zum Stripe schickst - anders herum, also Farben setzen, zum Leuchten bringen und dann zum Gucken warten, wäre einleuchtender.

Lies Dir combie's Liste zum Thema State-Maschine durch - dort ist, unter Anderem, der Nachtwächter verlinkt.
Wenn Dein Sketch darauf abgeändert ist, kannst Du auch vereinzelt z.B. Blitze aufleuchten lassen - Meine dauern 10ms, sieht 'ganz nett' aus.
(also per Zufall entscheiden, OB überhaupt jetzt ein Blitz erscheinen soll (aka random(65535)<3000) einen Pixel auswürfeln, die Startzeit merken und diesen Pixel während der Animation (also eigentlich direkt vor dem .show() - dort würde ich den Blitz auch einbinden) den Pixel 'überschreiben'.
So ist Dieser hell-weiß beim Blitz, oder eben 'normal' Ohne.

Die Stripes wirst Du mehrfach einspeisen müssen, sonst werden die 'hinteren Bereiche' immer rötlicher (Rot braucht am wenigstens Spannung, leuchtet also bei fallender Spannung am längsten).

MfG

postmaster-ino:
Hi

Der Sketch sollte so funktionieren.
Sieht aber *** aus :slight_smile:
Alles, was Du mehrfach machst, kann man zusammen fassen.

Hast du mir ein Beispiel?

postmaster-ino:
Auch kann ich mir kaum vorstellen, daß sämtliche LEDs später die gleiche Farbe zeigen sollen - Das wäre wesentlich billiger mit Baumarkt-Ware gegangen - Die gibt's ebenfalls direkt in Wasserdicht.

Wenn Du also später 'MEHR' machen willst, stören mich die delay() in Deinem Sketch.
Auch, daß Du ERST wartest, bevor Du die Daten zum Stripe schickst - anders herum, also Farben setzen, zum Leuchten bringen und dann zum Gucken warten, wäre einleuchtender.

Das is wie gesagt ein zusammenkopierter Teil des RGBWStrandtests.
Nachtürlich verbaut er keine neopixel mit 5V wenn ers einfarbig will.
Das wird erstmal ein Test, ob alles geht.
Mir gehts nur darum ob ich die Adafruit Library richtig anspreche mit mehreren Stripes, oder ob ich total aufm Holzweg bin.

postmaster-ino:
Lies Dir combie's Liste zum Thema State-Maschine durch - dort ist, unter Anderem, der Nachtwächter verlinkt.
Wenn Dein Sketch darauf abgeändert ist, kannst Du auch vereinzelt z.B. Blitze aufleuchten lassen - Meine dauern 10ms, sieht 'ganz nett' aus.
(also per Zufall entscheiden, OB überhaupt jetzt ein Blitz erscheinen soll (aka random(65535)<3000) einen Pixel auswürfeln, die Startzeit merken und diesen Pixel während der Animation (also eigentlich direkt vor dem .show() - dort würde ich den Blitz auch einbinden) den Pixel 'überschreiben'.
So ist Dieser hell-weiß beim Blitz, oder eben 'normal' Ohne.

Schau ich mir mal an

postmaster-ino:
Die Stripes wirst Du mehrfach einspeisen müssen, sonst werden die 'hinteren Bereiche' immer rötlicher (Rot braucht am wenigstens Spannung, leuchtet also bei fallender Spannung am längsten).

Meinst du Innerhalb eines Stripes?
Der längste is nachher 4m wie Gesagt.
Und jeder Stripe geht an die Verteilerschienen.

Hi

Bei der wasserdichten Ausführung ist 'Zwischendrin' ja eher unpraktisch - aber auf jeden Fall von beiden Seiten aus einspeisen.
Dazu kannst Du ein Lautsprecher-Doppel-Litz nehmen - wobei mir hier die UV-Beständigkeit nicht bekannt ist (sähe aber nett aus :wink: ).

const byte elemente=8;
const byte pin[elemente]={2,14,15,16,17,18,19,20);
const byte anz[elemente]={250,250,130,130,130,130,130,130);
boolean change[elemente];    //global wird change[...] mit 0/false initialisiert
Adafruit_NeoPixel strip[8];  //Platz für die Stripes schaffen; Variable strip[] vom Typ Adafruit_NeoPixel - 8x
...

*schnipp*
for (byte x=0;x<elemente;x++){  //Stripes einrichten
  pinMode(pin[x],OUTPUT);
  //folgende Zeile wirft zumindest keine Warnung ect.pp.
  strip[x] = Adafruit_NeoPixel(anz[x], pin[x], NEO_GRBW + NEO_KHZ800);
  strip[x].setBrightness(BRIGHTNESS);
  strip[x].begin();
  change[x]=true; //dieser Stripe hat neue Daten
  ownShow(x);  //ggf. unnötig, da in loop() eh neu ausgegeben wird (wegen change[]=true)
}

*schnipp*
loop(){
  for (byte x=0;x<elemente;x++) ownShow(x);  //alle Stripes aktualisieren - IMMER (aber nur, wenn nötig)
...
}

*schnipp*
void ownShow(byte stripe){
   if (change[stripe]){   //sind Änderungen 'gemeldet'?
      strip[stripe].show();      //dann Daten an den Stripe
      change[stripe]=false;  //und das Flag löschen
   }
}

Noch schöner wäre wohl ein struct - und/oder das automatische Abgrasen aller Array-Elemente - Da sind aber Andere wesentlich fitter drin, als ich.

MfG

PS: Einzig die Deklaration der Stripes innerhalb der Schleife und das 'Platz schaffen' vor setup() hatte ich in der IDE auf Warnungen geprüft - werden Keine ausgegeben - sollte also 'so tun'.

Kadara:
Und man ließt ja viel über Probleme, wenn was nicht stimmt bei neopixeln.

Die sind launisch wie Diven, weshalb ich ja die APA102 vorziehe.

Kadara:
Aber was du mit freememory meinst find ich nicht.
Ich krieg nur noch die Meldung:
Der Sketch verwendet 4278 Bytes (1%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 443 Bytes (5%) des dynamischen Speichers, 7749 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.

Das ist nur ein Teil der Wahrheit, da die Bytes für die LEDs an der Stelle noch nicht vom Compiler gesehen werden. Daher verwende ich die Programmbibliothek MemoryFree, um die tatsächlich freien Bytes zu ermitteln.

Kadara:
Mir gehts nur darum ob ich die Adafruit Library richtig anspreche mit mehreren Stripes, oder ob ich total aufm Holzweg bin.

Richtiger Weg.

LadyAda, die Dame mit den roten Haaren, erklärt Neopixel: Adafruit NeoPixel Überguide

Sorry, daß ich erst jetzt antworte, aber ich hatte viel zu tun die Tage.

postmaster-ino:

const byte elemente=8;

const byte pin[elemente]={2,14,15,16,17,18,19,20);
const byte anz[elemente]={250,250,130,130,130,130,130,130);
boolean change[elemente];    //global wird change[...] mit 0/false initialisiert
Adafruit_NeoPixel strip[8];  //Platz für die Stripes schaffen; Variable strip[] vom Typ Adafruit_NeoPixel - 8x
...

schnipp
for (byte x=0;x<elemente;x++){  //Stripes einrichten
  pinMode(pin[x],OUTPUT);
  //folgende Zeile wirft zumindest keine Warnung ect.pp.
  strip[x] = Adafruit_NeoPixel(anz[x], pin[x], NEO_GRBW + NEO_KHZ800);
  strip[x].setBrightness(BRIGHTNESS);
  strip[x].begin();
  change[x]=true; //dieser Stripe hat neue Daten
  ownShow(x);  //ggf. unnötig, da in loop() eh neu ausgegeben wird (wegen change[]=true)
}




PS: Einzig die Deklaration der Stripes innerhalb der Schleife und das 'Platz schaffen' vor setup() hatte ich in der IDE auf Warnungen geprüft - werden Keine ausgegeben - sollte also 'so tun'.

vielen Dank für das Beispiel.
mit variablen und containern muß ich mich eh noch genauer beschäftigen.

Da ich zwar programmiere, aber CNC maschinen, bring ichs zwar immer irgendwie zum laufen, hab schon viel gelernt, aber Trotzdem hab ich noch viel zu lernen.
Hier werd ich trotzdem erstmal mit Demosketchen arbeiten und die ein bischen anpassen.
Ganz einfach, weil mir die Zeit fehlt grade. Das reicht für die Sommersaison
Bei deinem Beispiel hat er mir spontan eine Zeile nicht genommen.

Aber erstmal nicht so schlimm.
Ich weiß wo ich ansetzen kann wenn ich mal dazu komme am code zu arbeiten.

Erstmal hab ichs geschafft das ein test stripe läuft.
Hab bis grade übers Telefon jemand der keine Ahnung hat von Arduino und co, Schritt für Schritt durchgelotst bis er nen Treiber installiert, ne IDE runtergeladen, ne Bibliothek installiert und den Sketch hochgeladen hat.

Und siehe da, es leuchtet :D.

Das Thema programmierung wird aber kommen.
Viel interessanter ist erstmal, ob die Hardwear funktioniert.
Fehlen noch Kuperschienen und Elkos. Dann kann der erste Testaufbau los gehen.

agmue:
Die sind launisch wie Diven, weshalb ich ja die APA102 vorziehe.

Hab grad mal geschaut.
Aber sind was ich so sehe auch ne gute Ecke teurer und hab ich nicht als RGBW gefunden.
Ich hoff einfach die funktionieren und zicken ned rum.

agmue:
Das ist nur ein Teil der Wahrheit, da die Bytes für die LEDs an der Stelle noch nicht vom Compiler gesehen werden. Daher verwende ich die Programmbibliothek MemoryFree, um die tatsächlich freien Bytes zu ermitteln.

Das muß ich morgen mal checken.
Sehr gut zu wissen jedenfalls.
Ich hoffe daß einer halt die 8 Packt.
Dann ist es leicht auf 2 zu verteilen.

Kadara:
Aber sind was ich so sehe auch ne gute Ecke teurer und hab ich nicht als RGBW gefunden.

Als RGBW kenne ich die auch nicht, man muß halt nehmen, was der Markt hergibt.

Kadara:
Sehr gut zu wissen jedenfalls.

Der Compiler sieht nur die globalen Variablen, nicht die lokalen, denn die werden ja erst zur Laufzeit angelegt.

@Kadara
Warum den Beitrag doppelt quoten und dann keine Anmerkung dazu ?
Liest du deine Beiträge nicht nochmal vor dem absenden ?
Fatal.....

Edit:
OK....

Sorry, den Post hab ich wohl erstellt als ich einen anderen korrigiert hab.
Hab ihn raus.

Nun versuche ich grade ein wenig was für mich umzusetzen, aber scheiter daran eine for schleife zu erstellen wo die Stripes zusammenfasst.

Wenn ich

 for(byte x=1; x<9; x++) {
         strip_[x].setPixelColor(i, strip_[x].Color(0,0,0, neopix_gamma[j] ) );
}

eingebe sagt er mir strip_ sei nicht definiert.
Also er erkennt die Nummerzuweisung der for schleife nicht.
Habs als byte probiert, aber auch mit int.
Will beides nicht. Wo mach ich hier noch nen Fehler?

Kadara:
Nun versuche ich grade ein wenig was für mich umzusetzen, aber scheiter daran eine for schleife zu erstellen wo die Stripes zusammenfasst.

Wenn ich

 for(byte x=1; x<9; x++) {

strip_[x].setPixelColor(i, strip_[x].Color(0,0,0, neopix_gamma[j] ) );
}


2

eingebe sagt er mir strip_ sei nicht definiert.
Also er erkennt die Nummerzuweisung der for schleife nicht.
Habs als byte probiert, aber auch mit int.
Will beides nicht. Wo mach ich hier noch nen Fehler?

Dein "strip_" gibt es wohl nicht, da fehlt eine Definition.
Da wir die nicht sehen, solltest du den kompletten Sketch posten.

Na definiert sind stripe_1-8.
Und das hätte ich gehofft nimmt er so an wenn x 1-8 ist.

Hi

Warum glaubst Du ist Deine Aussage jetzt besser als der Sketch?

MfG

Kadara:
Na definiert sind stripe_1-8.
Und das hätte ich gehofft nimmt er so an wenn x 1-8 ist.

Und warum zeigst du uns das nicht ?
Ist das geheim ?

#include <Adafruit_NeoPixel.h>


#define PIN_1 2
#define PIN_2 14
#define PIN_3 15
#define PIN_4 16
#define PIN_5 17
#define PIN_6 18
#define PIN_7 19
#define PIN_8 20

#define NUM_LEDS_1 146
#define NUM_LEDS_2 137
#define NUM_LEDS_3 63
#define NUM_LEDS_4 72
#define NUM_LEDS_5 75
#define NUM_LEDS_6 82
#define NUM_LEDS_7 87
#define NUM_LEDS_8 82

#define BRIGHTNESS 50
#define wait 5

Adafruit_NeoPixel strip_1 = Adafruit_NeoPixel(NUM_LEDS_1, PIN_1, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip_2 = Adafruit_NeoPixel(NUM_LEDS_2, PIN_2, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip_3 = Adafruit_NeoPixel(NUM_LEDS_3, PIN_3, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip_4 = Adafruit_NeoPixel(NUM_LEDS_4, PIN_4, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip_5 = Adafruit_NeoPixel(NUM_LEDS_5, PIN_5, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip_6 = Adafruit_NeoPixel(NUM_LEDS_6, PIN_6, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip_7 = Adafruit_NeoPixel(NUM_LEDS_7, PIN_7, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip_8 = Adafruit_NeoPixel(NUM_LEDS_8, PIN_8, NEO_GRBW + NEO_KHZ800);

byte neopix_gamma[] = {
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,
    1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  2,  2,  2,  2,  2,  2,
    2,  3,  3,  3,  3,  3,  3,  3,  4,  4,  4,  4,  4,  5,  5,  5,
    5,  6,  6,  6,  6,  7,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10,
   10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16,
   17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25,
   25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36,
   37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50,
   51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68,
   69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89,
   90, 92, 93, 95, 96, 98, 99,101,102,104,105,107,109,110,112,114,
  115,117,119,120,122,124,126,127,129,131,133,135,137,138,140,142,
  144,146,148,150,152,154,156,158,160,162,164,167,169,171,173,175,
  177,180,182,184,186,189,191,193,196,198,200,203,205,208,210,213,
  215,218,220,223,225,228,231,233,236,239,241,244,247,249,252,255 };

void setup() {

strip_1.setBrightness(BRIGHTNESS);
strip_2.setBrightness(BRIGHTNESS);
strip_3.setBrightness(BRIGHTNESS);
strip_4.setBrightness(BRIGHTNESS);
strip_5.setBrightness(BRIGHTNESS);
strip_6.setBrightness(BRIGHTNESS);
strip_7.setBrightness(BRIGHTNESS);
strip_8.setBrightness(BRIGHTNESS);
  strip_1.begin();
  strip_2.begin();
  strip_3.begin();
  strip_4.begin();
  strip_5.begin();
  strip_6.begin();
  strip_7.begin();
  strip_8.begin();
  strip_1.show(); // Initialize all pixels to 'off'
  strip_2.show();
  strip_3.show();
  strip_4.show();
  strip_5.show();
  strip_6.show();
  strip_7.show();
  strip_8.show();
  


// 0-3s Stripes fadin blau auf 100 %, blinken in Weiß

// 4-8s Stripes pulsieren rot

// 8-11s Stripes fadin grün auf 100 %, blinken in Weiß

// 11-15s Stripes pulsieren rot

// 15-24s Stripes laden sich orange auf bis alles orange ist, blinken in Weiß

// 24-34s Stripes pulsieren rot  die enden der Federn bleiben rot bei 100% akzente in Weiß

// 34-40s Stripes fadein grün, blinken in Weiß

// 40-41s Stripes blinken in Weiß

// 41-46s Stripes pulsieren rot

// 46-48s Stripes grün -out fade

// 48-54s Stripes grün -out fade

// 55-57s Stripes blinken in Weiß

// 57-72s Stripes fügen sich teile hinzu (erst rot an den Federn (bleibt), dann Blau (Bleibt auch), dann grün Bleibt auch), dann die Arme orange)
// 72-80s white over rainbow


}

void loop() {
  for(int j = 0; j < 256 ; j++){
      for(int i=0; i<strip_1.numPixels(); i+2) {
          strip_1.setPixelColor(i, strip_1.Color(0,0,0, neopix_gamma[j] ) );
          strip_2.setPixelColor(i, strip_2.Color(0,0,0, neopix_gamma[j] ) );
          strip_3.setPixelColor(i, strip_3.Color(0,0,0, neopix_gamma[j] ) );
          strip_4.setPixelColor(i, strip_4.Color(0,0,0, neopix_gamma[j] ) );
          strip_5.setPixelColor(i, strip_5.Color(0,0,0, neopix_gamma[j] ) );
          strip_6.setPixelColor(i, strip_6.Color(0,0,0, neopix_gamma[j] ) );
          strip_7.setPixelColor(i, strip_7.Color(0,0,0, neopix_gamma[j] ) );
          strip_8.setPixelColor(i, strip_8.Color(0,0,0, neopix_gamma[j] ) );
        }
        for(int i=strip_1.numPixels(); i>0; i-2) {
          strip_1.setPixelColor(i, strip_1.Color(0,0,0, neopix_gamma[j] ) );
          strip_2.setPixelColor(i, strip_2.Color(0,0,0, neopix_gamma[j] ) );
          strip_3.setPixelColor(i, strip_3.Color(0,0,0, neopix_gamma[j] ) );
          strip_4.setPixelColor(i, strip_4.Color(0,0,0, neopix_gamma[j] ) );
          strip_5.setPixelColor(i, strip_5.Color(0,0,0, neopix_gamma[j] ) );
          strip_6.setPixelColor(i, strip_6.Color(0,0,0, neopix_gamma[j] ) );
          strip_7.setPixelColor(i, strip_7.Color(0,0,0, neopix_gamma[j] ) );
          strip_8.setPixelColor(i, strip_8.Color(0,0,0, neopix_gamma[j] ) );
        }
        delay(wait);
        strip_1.show();
        strip_2.show();
        strip_3.show();
        strip_4.show();
        strip_5.show();
        strip_6.show();
        strip_7.show();
        strip_8.show();
      }

  for(int j = 255; j >= 0 ; j--){
      for(int i=0; i<strip_1.numPixels(); i+2) {
        for(byte x=1; x<9; x++) {
          strip_[x].setPixelColor(i, strip_[x].Color(0,0,0, neopix_gamma[j] ) );
          
        }
        for(int i=strip_1.numPixels()-1; i>0; i-2) {
          strip_1.setPixelColor(i, strip_1.Color(0,0,0, neopix_gamma[j] ) );
          strip_2.setPixelColor(i, strip_2.Color(0,0,0, neopix_gamma[j] ) );
          strip_3.setPixelColor(i, strip_3.Color(0,0,0, neopix_gamma[j] ) );
          strip_4.setPixelColor(i, strip_4.Color(0,0,0, neopix_gamma[j] ) );
          strip_5.setPixelColor(i, strip_5.Color(0,0,0, neopix_gamma[j] ) );
          strip_6.setPixelColor(i, strip_6.Color(0,0,0, neopix_gamma[j] ) );
          strip_7.setPixelColor(i, strip_7.Color(0,0,0, neopix_gamma[j] ) );
          strip_8.setPixelColor(i, strip_8.Color(0,0,0, neopix_gamma[j] ) );
        }
        delay(wait);
        strip_1.show();
        strip_2.show();
        strip_3.show();
        strip_4.show();
        strip_5.show();
        strip_6.show();
        strip_7.show();
        strip_8.show();
      }
}

Das is der Code an dem ich grade versuche alles etwas kleiner zu kriegen.

Etwas OT aber rein Interesse halber, unter welchen Umständen liefert

.Color(0,0,0, neopix_gamma[j])

etwas anderes als 0?
Verändert sich Schwarz wiklich unter anderen Gamma Werten?

@Kadara warum nimmst du keinen Array für die Stripes?