LED stripe läst ein Stufe aus (Plateau zu früh) und läuft nicht von oben nach unten

Hallo in die Runde,
vielleicht kann mir hier jemand weiter helfen. Habe für die Treppe 1 und 2 eine Steuerung über Bewegungsensoren wann sie angehen sollen, von oben nach unten und unten nach oben.
Von unten nach oben läuft alles nach den Vorgabe, Stufen, Plateau usw.
Von oben nach unten, macht er auch, aber er macht das Plateau an die falsche stelle. Richtig wäre nach Stufe 4.
Hier solten die LEDs auch von oben nach unten laufen (LEDs schalten in Laufrichtung ein wie man geht)

Bewegung oben erkannt - Licht von oben nach unten
Beleuchte Stufe 10: LEDs 260 bis 279
Beleuchte Stufe 9: LEDs 240 bis 259
Beleuchte Stufe 8: LEDs 220 bis 239
Beleuchte Stufe 7: LEDs 200 bis 219
Beleuchte Stufe 6: LEDs 180 bis 199
Beleuchte Stufe 5: LEDs 160 bis 179
Beleuchte Plateau: LEDs 80 bis 159
Beleuchte Stufe 4: LEDs 60 bis 79
Beleuchte Stufe 3: LEDs 40 bis 59
Beleuchte Stufe 2: LEDs 20 bis 39
Beleuchte Stufe 1: LEDs 0 bis 19

Von oben nach unten

void lichtVonObenNachUnten(CRGB* leds, int stufen, int plateauLeds, int ledsProStufe, CRGB farbe, int plateauPosition) {
  int totalLEDs = NUM_LEDS_TREPPE1 - 1; // Starte vom Ende des LED-Streifens

  for (int i = stufen - 1; i >= 0; i--) {
    // Beleuchte die Stufe
    Serial.print("Beleuchte Stufe ");
    Serial.print(i + 1);
    Serial.print(": LEDs ");
    Serial.print(totalLEDs - ledsProStufe + 1);
    Serial.print(" bis ");
    Serial.println(totalLEDs);
    for (int j = ledsProStufe - 1; j >= 0; j--) {
      leds[totalLEDs - j] = farbe;
      if (lauflicht) FastLED.show();
      delay(50);
    }
    if (!lauflicht) FastLED.show();
    delay(verzoegerungZwischenStufen);
    totalLEDs -= ledsProStufe;

    // Beleuchte das Plateau, wenn wir seine Position erreicht haben
    if (i == plateauPosition + 1) {
      Serial.print("Beleuchte Plateau: LEDs ");
      Serial.print(totalLEDs - plateauLeds + 1);
      Serial.print(" bis ");
      Serial.println(totalLEDs);
      for (int k = plateauLeds - 1; k >= 0; k--) {
        leds[totalLEDs - k] = farbe;
        if (lauflicht) FastLED.show();
        delay(50);
      }
      if (!lauflicht) FastLED.show();
      delay(verzoegerungZwischenStufen);
      totalLEDs -= plateauLeds;
    }
  }
}

Gesamter Sketch

#include <FastLED.h>

// Anzahl der LEDs für die beiden Treppen
#define NUM_LEDS_TREPPE1 280 // Gesamtzahl der LEDs für Treppe 1
#define NUM_LEDS_TREPPE2 100 // Gesamtzahl der LEDs für Treppe 2

// WS2815 LED Stripe Pins
#define LED_PIN_TREPPE1 16   // Treppe 1 LED-Pin
#define LED_PIN_TREPPE2 18  // Treppe 2 LED-Pin

// Bewegungssensoren Pins (HC-SR501)
#define PIR_SENSOR_OBEN_TREPPE1 15
#define PIR_SENSOR_UNTEN_TREPPE1 2
#define PIR_SENSOR_OBEN_TREPPE2 4
#define PIR_SENSOR_UNTEN_TREPPE2 17

// Konfiguration der Treppen
int stufenTreppe1 = 10;           // Anzahl der Stufen für Treppe 1
int stufenTreppe2 = 5;           // Anzahl der Stufen für Treppe 2
int ledsProStufeTreppe1 = 20;    // LEDs pro Stufe für Treppe 1
int ledsProStufeTreppe2 = 10;    // LEDs pro Stufe für Treppe 2
int plateauLedsTreppe1 = 80;     // LEDs für das Plateau bei Treppe 1
int plateauLedsTreppe2 = 20;     // LEDs für das Plateau bei Treppe 2
int plateauPositionTreppe1 = 3;  // Nach welcher Stufe das Plateau bei Treppe 1 kommt (0-basiert)
int plateauPositionTreppe2 = 3;  // Nach welcher Stufe das Plateau bei Treppe 2 kommt (0-basiert)
bool treppe1Aktiv = true;        // Ob Treppe 1 aktiv ist
bool treppe2Aktiv = false;        // Ob Treppe 2 aktiv ist

// Farben und Helligkeit
CRGB farbeTreppe1 = CRGB(255, 147, 41); // Warmweiß für Treppe 1
CRGB farbeTreppe2 = CRGB(255, 147, 41); // Warmweiß für Treppe 2
int helligkeitTreppe1 = 100;    // Helligkeit Treppe 1 (0-255)
int helligkeitTreppe2 = 200;    // Helligkeit Treppe 2 (0-255)

// Verzögerungen und Lauflicht
int verzoegerungZwischenStufen = 500; // Verzögerung in Millisekunden zwischen den Stufen
bool lauflicht = true;          // Ob die LEDs als Lauflicht angehen

// LED Arrays für beide Treppen
CRGB ledsTreppe1[NUM_LEDS_TREPPE1];
CRGB ledsTreppe2[NUM_LEDS_TREPPE2];

void setup() {
  // Initialisierung der seriellen Kommunikation für Debug-Ausgaben
  Serial.begin(9600);
  
  // Debug-Ausgaben
  Serial.println("Treppe 1 Konfiguration:");
  Serial.print("Stufen: ");
  Serial.println(stufenTreppe1);
  Serial.print("LEDs pro Stufe: ");
  Serial.println(ledsProStufeTreppe1);
  Serial.print("Plateau LEDs: ");
  Serial.println(plateauLedsTreppe1);
  Serial.print("Plateau Position: ");
  Serial.println(plateauPositionTreppe1);

  // Initialisierung der LED Stripes
  FastLED.addLeds<WS2812, LED_PIN_TREPPE1, GRB>(ledsTreppe1, NUM_LEDS_TREPPE1);
  FastLED.addLeds<WS2812, LED_PIN_TREPPE2, GRB>(ledsTreppe2, NUM_LEDS_TREPPE2);

  // Setze die Helligkeit für die LED Stripes
  FastLED.setBrightness(helligkeitTreppe1);
  FastLED.setBrightness(helligkeitTreppe2);

  // Setze Pins für die Bewegungssensoren als Eingänge
  pinMode(PIR_SENSOR_OBEN_TREPPE1, INPUT);
  pinMode(PIR_SENSOR_UNTEN_TREPPE1, INPUT);
  pinMode(PIR_SENSOR_OBEN_TREPPE2, INPUT);
  pinMode(PIR_SENSOR_UNTEN_TREPPE2, INPUT);
}

void loop() {
  // Treppe 1 steuern
  if (treppe1Aktiv) {
    treppenSteuerung(PIR_SENSOR_OBEN_TREPPE1, PIR_SENSOR_UNTEN_TREPPE1, ledsTreppe1, stufenTreppe1, plateauLedsTreppe1, ledsProStufeTreppe1, farbeTreppe1, plateauPositionTreppe1);
  }

  // Treppe 2 steuern
  if (treppe2Aktiv) {
    treppenSteuerung(PIR_SENSOR_OBEN_TREPPE2, PIR_SENSOR_UNTEN_TREPPE2, ledsTreppe2, stufenTreppe2, plateauLedsTreppe2, ledsProStufeTreppe2, farbeTreppe2, plateauPositionTreppe2);
  }
}

void treppenSteuerung(int sensorObenPin, int sensorUntenPin, CRGB* leds, int stufen, int plateauLeds, int ledsProStufe, CRGB farbe, int plateauPosition) {
  int sensorOben = digitalRead(sensorObenPin);
  int sensorUnten = digitalRead(sensorUntenPin);

  if (sensorOben == HIGH) {
    Serial.println("Bewegung oben erkannt - Licht von oben nach unten");
    lichtVonObenNachUnten(leds, stufen, plateauLeds, ledsProStufe, farbe, plateauPosition);
    delay(5000);
    lichtAusVonObenNachUnten(leds, stufen, plateauLeds, ledsProStufe, plateauPosition);
  } else if (sensorUnten == HIGH) {
    Serial.println("Bewegung unten erkannt - Licht von unten nach oben");
    lichtVonUntenNachOben(leds, stufen, plateauLeds, ledsProStufe, farbe, plateauPosition);
    delay(5000);
    lichtAusVonUntenNachOben(leds, stufen, plateauLeds, ledsProStufe, plateauPosition);
  }
}

void lichtVonObenNachUnten(CRGB* leds, int stufen, int plateauLeds, int ledsProStufe, CRGB farbe, int plateauPosition) {
  int totalLEDs = NUM_LEDS_TREPPE1 - 1; // Starte vom Ende des LED-Streifens

  for (int i = stufen - 1; i >= 0; i--) {
    // Beleuchte die Stufe
    Serial.print("Beleuchte Stufe ");
    Serial.print(i + 1);
    Serial.print(": LEDs ");
    Serial.print(totalLEDs - ledsProStufe + 1);
    Serial.print(" bis ");
    Serial.println(totalLEDs);
    for (int j = ledsProStufe - 1; j >= 0; j--) {
      leds[totalLEDs - j] = farbe;
      if (lauflicht) FastLED.show();
      delay(50);
    }
    if (!lauflicht) FastLED.show();
    delay(verzoegerungZwischenStufen);
    totalLEDs -= ledsProStufe;

    // Beleuchte das Plateau, wenn wir seine Position erreicht haben
    if (i == plateauPosition + 1) {
      Serial.print("Beleuchte Plateau: LEDs ");
      Serial.print(totalLEDs - plateauLeds + 1);
      Serial.print(" bis ");
      Serial.println(totalLEDs);
      for (int k = plateauLeds - 1; k >= 0; k--) {
        leds[totalLEDs - k] = farbe;
        if (lauflicht) FastLED.show();
        delay(50);
      }
      if (!lauflicht) FastLED.show();
      delay(verzoegerungZwischenStufen);
      totalLEDs -= plateauLeds;
    }
  }
}

void lichtVonUntenNachOben(CRGB* leds, int stufen, int plateauLeds, int ledsProStufe, CRGB farbe, int plateauPosition) {
  int totalLEDs = 0;

  for (int i = 0; i < stufen; i++) {
    // Beleuchte das Plateau, wenn wir seine Position erreicht haben
    if (i == plateauPosition) {
      Serial.print("Beleuchte Plateau: LEDs ");
      Serial.print(totalLEDs);
      Serial.print(" bis ");
      Serial.println(totalLEDs + plateauLeds - 1);
      for (int k = 0; k < plateauLeds; k++) {
        leds[totalLEDs + k] = farbe;
        if (lauflicht) FastLED.show();
        delay(50);
      }
      if (!lauflicht) FastLED.show();
      delay(verzoegerungZwischenStufen);
      totalLEDs += plateauLeds;
    }

    // Beleuchte die Stufe
    Serial.print("Beleuchte Stufe ");
    Serial.print(i + 1);
    Serial.print(": LEDs ");
    Serial.print(totalLEDs);
    Serial.print(" bis ");
    Serial.println(totalLEDs + ledsProStufe - 1);
    for (int j = 0; j < ledsProStufe; j++) {
      leds[totalLEDs + j] = farbe;
      if (lauflicht) FastLED.show();
      delay(50);
    }
    if (!lauflicht) FastLED.show();
    delay(verzoegerungZwischenStufen);
    totalLEDs += ledsProStufe;
  }
}

void lichtAusVonObenNachUnten(CRGB* leds, int stufen, int plateauLeds, int ledsProStufe, int plateauPosition) {
  int totalLEDs = 0;

  for (int i = 0; i < stufen; i++) {
    // Schalte das Plateau aus, wenn wir seine Position erreicht haben
    if (i == plateauPosition) {
      Serial.print("Schalte Plateau aus: LEDs ");
      Serial.print(totalLEDs);
      Serial.print(" bis ");
      Serial.println(totalLEDs + plateauLeds - 1);
      for (int k = 0; k < plateauLeds; k++) {
        leds[totalLEDs + k] = CRGB::Black;
        if (lauflicht) FastLED.show();
        delay(50);
      }
      if (!lauflicht) FastLED.show();
      delay(verzoegerungZwischenStufen);
      totalLEDs += plateauLeds;
    }

    // Schalte die Stufe aus
    Serial.print("Schalte Stufe ");
    Serial.print(i + 1);
    Serial.print(" aus: LEDs ");
    Serial.print(totalLEDs);
    Serial.print(" bis ");
    Serial.println(totalLEDs + ledsProStufe - 1);
    for (int j = 0; j < ledsProStufe; j++) {
      leds[totalLEDs + j] = CRGB::Black;
      if (lauflicht) FastLED.show();
      delay(50);
    }
    if (!lauflicht) FastLED.show();
    delay(verzoegerungZwischenStufen);
    totalLEDs += ledsProStufe;
  }
}

void lichtAusVonUntenNachOben(CRGB* leds, int stufen, int plateauLeds, int ledsProStufe, int plateauPosition) {
  int totalLEDs = 0;

  for (int i = 0; i < stufen; i++) {
    // Schalte das Plateau aus, wenn wir seine Position erreicht haben
    if (i == plateauPosition) {
      Serial.print("Schalte Plateau aus: LEDs ");
      Serial.print(totalLEDs);
      Serial.print(" bis ");
      Serial.println(totalLEDs + plateauLeds - 1);
      for (int k = 0; k < plateauLeds; k++) {
        leds[totalLEDs + k] = CRGB::Black;
        if (lauflicht) FastLED.show();
        delay(50);
      }
      if (!lauflicht) FastLED.show();
      delay(verzoegerungZwischenStufen);
      totalLEDs += plateauLeds;
    }

    // Schalte die Stufe aus
    Serial.print("Schalte Stufe ");
    Serial.print(i + 1);
    Serial.print(" aus: LEDs ");
    Serial.print(totalLEDs);
    Serial.print(" bis ");
    Serial.println(totalLEDs + ledsProStufe - 1);
    for (int j = 0; j < ledsProStufe; j++) {
      leds[totalLEDs + j] = CRGB::Black;
      if (lauflicht) FastLED.show();
      delay(50);
    }
    if (!lauflicht) FastLED.show();
    delay(verzoegerungZwischenStufen);
    totalLEDs += ledsProStufe;
  }
}

Wenn mir da jemand helfen könnte wäre ich sehr Dankbar

vs

Prüfe das mal

Das war es, Dankeschön