NeoPixel fade mit for-loop funktioniert nicht

Hi,
Ich bin gerade dabei eine Treppenbeleuchtung für einen Kumpel mithilfe SK6812 LED-Streifen und einem Arduino zu basteln.
Zum Glück bin ich auf dieses Projekt gestoßen und habe es für meine Bedürfnisse etwas angepasst.

Ich habe es natürlich auch vor meinen Anpassungen erfolgreich getestet.
Das einzige, was nicht funktionierte, war das ein- und ausfaden der Stufen-LEDs.

Eigentlich sollte dies mithilfe folgenden Funktionen laufen:

// Fade light each step strip
void colourWipeDown(uint32_t c, uint16_t wait) {
  for (uint16_t k = 0; k < LEDSTRIPS; k++){
    int start = (NUMPIXELS/LEDSTRIPS) *k;
      for (uint16_t j = start; j < start + LEDSPERSTAIR; j++){
        strip.setPixelColor(j, c);
        delay(0);
    }
    strip.show();
    delay(wait);
  }
}



// Fade light each step strip
void colourWipeUp(uint32_t c, uint16_t wait) {
  for (uint16_t k = LEDSTRIPS; k > 0; k--){
    int start = NUMPIXELS/LEDSTRIPS *k;
    int x = start;
    do
    {
      strip.setPixelColor(x-1, c); // white of RGBW
      x--;
    } while (x > start - LEDSPERSTAIR);
    
    strip.show();
    delay(wait);
  }
}

Die LED-Streifen gehen Stufe für Stufe an, aber nicht "sanft", sondern direkt.

Eine andere Funktion, zum Faden der jeweils ersten Stufe, funktioniert hingegen:

// fades in the first steps, defined by bottomSteps and topSteps. bFade is the brightness of the white color
void firstSteps() { 
  for (bFade; bFade < 30; bFade++) {
    for (int i = 0; i < LEDSPERSTAIR; i++) {
      strip.setPixelColor(bottomStep[i], strip.Color(0,0,0,bFade));
      strip.setPixelColor(topStep[i], strip.Color(0,0,0,bFade));
      strip.show();
      delay(0);
    }
    delay(6);
  }
}

Verstehen, warum das eine funktioniert, aber das andere tue ich langsam nicht mehr.

Hat hier jemand noch eine Ahnung, woran das liegen kann?

Zur besseren Verständnis, hier mein kompletter Sketch.
Falls irgendwas nicht "gut" geschrieben ist, sei mir das bitte verziehen, da ich absolut kein Profi bin, was Arduino angeht und auch nie werden werde (und auch nicht brauche).
Wie gesagt: Es funktioniert ansonsten ALLES, genauso, wie mein Kumpel und ich es haben wollen - bis auf das sanfte ein- und ausschalten der Stufen.

EDIT: Sketch angehängt:
Alberto_treppe.ino (22.4 KB)

Warum kannst Du den Sketch hier nicht einhängen?
Ich komm an das nicht ran - und für die Nachwelt ist der Sketch dort auch verloren.
Kein Mensch weiss in nächster Zeit, was Du da hast.

Was funktioniert und was nicht?

Was erwartetest Du von dem Code; was macht es?

Hab vergessen, dass man hier was anhängen kann, sorry. Habs nachgetragen.

Und was funktionieren soll und was nicht, hatte ich zwar geschrieben, war dann aber nach dem Posten weg ... keine Ahnung, was da schief gegangen ist.
Ist auch nachgetragen.

Kurz:
Die LEDs an jeder Stufe gehen Stufe für Stufe an und aus, jedoch nicht sanft, also sie faden nicht ein und aus, sondern gehen direkt an und aus.

Naja, hast ja auch so programmiert. Wenn Du den Helligkeitsgrad verändern willst, musst Du das auch machen.

Dir fehlt die zusätzliche Variable für die Helligkeit - und schau Dir an, wie das in einer zweiten - aussenliegenden - Schleife, gelöst ist.

Die Helligkeit wird doch über den Farbcode hier festgelegt:

if ( (alarmValueTop == HIGH) && (downUp == 0) ) { // the 2nd term indicates that there is currently no activity (up or down)
      timeOut=millis(); // Timestamp when the PIR is triggered. The LED cycle wil then start.
      downUp = 1;
      colourWipeDown(strip.Color(0, 0, 0, 255), turnOnSpeed ); // Warm White,led-light from top to down. If using RGB-strips just use 3 color values like (255,255,255) for white
    }

In dem Fall (0,0,0,255) für die weiße LED.

In den Schleifen der beiden Funktionen wird dies doch durch die Variable 'c' abgerufen - sofern ich das Konstrukt richtig verstanden habe.
Aber jetzt, wo ich das gerade so nochmal betrachte, fällt mir auf, dass die Variable 'c' nicht erhöht oder verkleinert wird, was ja das Faden auslösen würde.

Da hab ich den Wald vor lauter Bäumen nicht gesehen...
Irgendwie muss ich das jetzt hinbekommen noch eine Schleife für den Weiß-Wert einzubinden...

Da ein Delay zwischen den Stufen stattfindet, wird das nicht so einfach gehen. Du wirst das Delay entfernen müssen, damit du öfters in die Schleife der Stufe kommst, wo du schritt für schritt die Helligkeit oder den Farbwert anpasst. (Zumindest wenn ich das richtig erkenne)

    delay(wait);
    wait = wait +50; // adds a bit time each step to have a nice effect

Hab ich falsch gedeutet, sorry.

Das +50 sorgt dafür, dass das Licht im Treppenverlauf langsamer wird... ein guter Effekt, wie ich finde.

EDIT: Habs hinbekommen. Ich musste zwei neue Funktionen schreiben zum Ausschalten der LEDs.
Hier ein Video vom Effekt (nicht Treppe, sondern die LEDs eines anderen Projektes zum Testen).
Sketch ist im Anhang.
... für die Nachwelt.fading_stairs.ino (24.3 KB)

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