For loop, wie abbrechen

Hallo,

ich habe mehrere Buttons und zwei Led-Streifen.

Jeder Butten triggert eine bestimmten Bereich des Led-Streifens.
Wenn ich die Led-Animation auslöse reagiert der Arduino nicht mehr.

Wie kann ich den loop in Echtzeit unterbrechen?

So sieht mein Sketch bisher aus:

#include <ezButton.h>
#include <Adafruit_NeoPixel.h>

#define PINInner 2
#define NUM_LEDSInner 188
Adafruit_NeoPixel stripInner = Adafruit_NeoPixel(NUM_LEDSInner, PINInner, NEO_GRB + NEO_KHZ800);

#define PINOuter 12
#define NUM_LEDSOuter 53
Adafruit_NeoPixel stripOuter = Adafruit_NeoPixel(NUM_LEDSOuter, PINOuter, NEO_GRB + NEO_KHZ800);

ezButton Box1(3);
ezButton Box2(4);
ezButton Box3(5);
ezButton Box4(6);
ezButton Box5(7);
ezButton Box6(8);
ezButton Box7(9);
ezButton Box8(10);
ezButton Box9(11);

ezButton BoxArray[9] = {Box1, Box2, Box3, Box4, Box5, Box6, Box7, Box8, Box9};

int usedBoxes = 0;

bool MainStatusInner;
bool MainStatusOuter;
int SPEED = 100;
int start1 = 97;
int start2 = 53;


void setup() {
  Serial.begin(9600);
  for(int i = 0; i < 9; i++)
    BoxArray[i].setDebounceTime(50); // set debounce time to 100 milliseconds

  stripInner.begin(); // INITIALIZE NeoPixel
  stripInner.setPixelColor(start1, stripInner.Color(200, 200, 0));
  stripInner.show(); // Set all pixel colors to 'off'

  stripOuter.begin(); // INITIALIZE NeoPixel
  stripOuter.show(); // Set all pixel colors to 'off'
}

void loop() {
  for(int i = 0; i < 9; i++)
    BoxArray[i].loop(); // MUST call the loop() function first

  for(int i = 0; i < 9; i++) {
    if(BoxArray[i].isPressed()) 
      usedBoxes++;

    if(BoxArray[i].isReleased())
      usedBoxes--;
    
    Serial.print("usedBoxes:");
    Serial.println(usedBoxes);
  } 

  RunningLights(0x00,0xff,0x00, SPEED, start1, start1);
  RevRunningLights(0x00,0xff,0x00, SPEED, start2, start2);
}

void RunningLights(byte red, byte green, byte blue, int WaveDelay, int RcarInner, int LcarInner) {
  
  int RightPositionInner=start1;
  int LeftPositionInner=start1;
 
  for(int j=0; j<NUM_LEDSInner*2; j++) {

  stripInner.setPixelColor(start1, stripInner.Color(200, 200, 0));
  
   if (BoxArray[0].isPressed()) {
    stripInner.setPixelColor(0, stripInner.Color(200, 200, 0));
    RcarInner=0;
    MainStatusInner=1;
  
  } if (BoxArray[1].isPressed()) {
    stripInner.setPixelColor(12, stripInner.Color(200, 200, 0));
    RcarInner=12;
    MainStatusInner=1;
    
  } if (BoxArray[2].isPressed()) {
    stripInner.setPixelColor(23, stripInner.Color(200, 200, 0));
    RcarInner=23;
    MainStatusInner=1;
    
  } if (BoxArray[3].isPressed()) {
    stripInner.setPixelColor(34, stripInner.Color(200, 200, 0));
    RcarInner=34;
    MainStatusInner=1;
    
  } if (BoxArray[4].isPressed()) {
    stripInner.setPixelColor(120, stripInner.Color(200, 200, 0));
    LcarInner=120;
    MainStatusInner=1;
    
  } if (BoxArray[5].isPressed()) {
    stripInner.setPixelColor(131, stripInner.Color(200, 200, 0));
    LcarInner=131;
    MainStatusInner=1;
    
  } if (BoxArray[6].isPressed()) {
    stripInner.setPixelColor(143, stripInner.Color(200, 200, 0));
    LcarInner=143;
    MainStatusInner=1;
    
 
  if (MainStatusInner==1){
      
      RightPositionInner++; // = 0; //Position + Rate;
      for(int i=start1; i>RcarInner; i--) {
        setPixelInner(i,((sin(i+RightPositionInner) * 127 + 128)/255)*red,
                        ((sin(i+RightPositionInner) * 127 + 128)/255)*green,
                        ((sin(i+RightPositionInner) * 127 + 128)/255)*blue);
     }

      LeftPositionInner--; // = 0; //Position + Rate;
      for(int i=start1; i<LcarInner; i++) {
        setPixelInner(i,((sin(i+LeftPositionInner) * 127 + 128)/255)*red,
                        ((sin(i+LeftPositionInner) * 127 + 128)/255)*green,
                        ((sin(i+LeftPositionInner) * 127 + 128)/255)*blue);
     }
      
      stripInner.setPixelColor(start1, stripInner.Color(200, 200, 0));
      
      showstripInner();
      delay(WaveDelay);
      
      
}
 RcarInner=start1;
 LcarInner=start1;

 stripInner.fill((0,0,0));
 showstripInner();
}
}
}

void RevRunningLights(byte red, byte green, byte blue, int WaveDelay, int RcarOuter, int LcarOuter) {
  int RightPosition=start2;
  int LeftPosition=start2;
 
  for(int j=0; j<NUM_LEDSOuter*2; j++) {
  
       if (BoxArray[7].isPressed()) {
    stripOuter.setPixelColor(32, stripOuter.Color(200, 200, 0));
    RcarOuter=32;
    MainStatusOuter=1;
    
  } if (BoxArray[8].isPressed()) {
    stripOuter.setPixelColor(21, stripOuter.Color(200, 200, 0));
    RcarOuter=21;
    MainStatusOuter=1;
    
  }
  
   
    if (MainStatusOuter==1){
      
      RightPosition++; // = 0; //Position + Rate;
      for(int i=start2; i>RcarOuter; i--) {
        setPixelOuter(i,((sin(i+RightPosition) * 127 + 128)/255)*red,
                   ((sin(i+RightPosition) * 127 + 128)/255)*green,
                   ((sin(i+RightPosition) * 127 + 128)/255)*blue);
     }

      LeftPosition--; // = 0; //Position + Rate;
      for(int i=start2; i<LcarOuter; i++) {
        setPixelOuter(i,((sin(i+LeftPosition) * 127 + 128)/255)*red,
                   ((sin(i+LeftPosition) * 127 + 128)/255)*green,
                   ((sin(i+LeftPosition) * 127 + 128)/255)*blue);
     }
      
      stripOuter.setPixelColor(start2, stripOuter.Color(200, 200, 0));
      
      showstripOuter();
      delay(WaveDelay);
      
      }
}
 RcarOuter=start2;
 LcarOuter=start2;

 stripOuter.fill((0,0,0));
 showstripOuter();
}


void showstripInner() {
 stripInner.show();
}

void showstripOuter() {
 stripOuter.show();
}

void setPixelInner(int PixelInner, byte red, byte green, byte blue) {
 
   stripInner.setPixelColor(PixelInner, stripInner.Color(red, green, blue));
}

void setPixelOuter(int PixelInner, byte red, byte green, byte blue) {
 
   stripOuter.setPixelColor(PixelInner, stripOuter.Color(red, green, blue));
}

void setAllInner(byte red, byte green, byte blue) {
  for(int i = 0; i < NUM_LEDSInner; i++ ) {
    setPixelInner(i, red, green, blue);
  }
  showstripInner();
}


Danke für jede Hilfe!

Indem Du auf delay verzichtest und auf blockierende Schleifen.

Gruß Tommy

Warum willst Du das tun?

Was heisst das?
Kommt auf dem SerMon keine Ausgabe mehr?

Ich glaube nicht, das der Code sauber ist.

Beispiel:

      MainStatusInner = 1;
      if (MainStatusInner == 1)
      {

Das stimmt immer.

Während RunningLights so abschliesst:

        stripInner.setPixelColor(start1, stripInner.Color(200, 200, 0));
        showstripInner();
        delay(WaveDelay);
      }
      RcarInner = start1;
      LcarInner = start1;
      stripInner.fill((0, 0, 0));
      showstripInner();
    }
  }
}

ist es bei RevRunningLights:

      stripOuter.setPixelColor(start2, stripOuter.Color(200, 200, 0));
      showstripOuter();
      delay(WaveDelay);
    }
  }
  RcarOuter = start2;
  LcarOuter = start2;
  stripOuter.fill((0, 0, 0));
  showstripOuter();
}

Formatiere Deinen Code mit STRG-T und bau das so, das Du selbst siehst, wo es klemmt.
Bau erstmal nur eine Funktion und die zuverlässig.
Dann den Rest nacheinander.

Danke für die Hilfe!!!!

Ich habe jetzt die delays rausgeschmissen.
Jetzt blitzt es nur noch auf.

Es sieht jetzt folgendermaßen aus:

#include <ezButton.h>
#include <Adafruit_NeoPixel.h>

#define PINInner 2
#define NUM_LEDSInner 188
Adafruit_NeoPixel stripInner = Adafruit_NeoPixel(NUM_LEDSInner, PINInner, NEO_GRB + NEO_KHZ800);

#define PINOuter 12
#define NUM_LEDSOuter 53
Adafruit_NeoPixel stripOuter = Adafruit_NeoPixel(NUM_LEDSOuter, PINOuter, NEO_GRB + NEO_KHZ800);

ezButton Box1(3);
ezButton Box2(4);
ezButton Box3(5);
ezButton Box4(6);
ezButton Box5(7);
ezButton Box6(8);
ezButton Box7(9);
ezButton Box8(10);
ezButton Box9(11);

ezButton BoxArray[9] = {Box1, Box2, Box3, Box4, Box5, Box6, Box7, Box8, Box9};

int usedBoxes = 0;

bool MainStatusInner;
bool MainStatusOuter;
int INTERVALL = 10;
int start1 = 97;
int start2 = 53;


void setup() {
  Serial.begin(9600);
  for(int i = 0; i < 9; i++)
    BoxArray[i].setDebounceTime(50); // set debounce time to 100 milliseconds

  stripInner.begin(); // INITIALIZE NeoPixel
  stripInner.setPixelColor(start1, stripInner.Color(200, 200, 0));
  stripInner.show(); // Set all pixel colors to 'off'

  stripOuter.begin(); // INITIALIZE NeoPixel
  stripOuter.show(); // Set all pixel colors to 'off'
}

void loop() {
  for(int i = 0; i < 9; i++)
    BoxArray[i].loop(); // MUST call the loop() function first

  for(int i = 0; i < 9; i++) {
    if(BoxArray[i].isPressed()) 
      usedBoxes++;

    if(BoxArray[i].isReleased())
      usedBoxes--;
    
    Serial.print("usedBoxes:");
    Serial.println(usedBoxes);
  } 

  RunningLights(0x00,0xff,0x00, start1, start1);
  RevRunningLights(0x00,0xff,0x00, start2, start2);
}

void RunningLights(byte red, byte green, byte blue, int RcarInner, int LcarInner) {
  unsigned long currentMillis = millis();
  static unsigned long previousMillis = 0; 
  int RightPositionInner=start1;
  int LeftPositionInner=start1;
 
  for(int j=0; j<NUM_LEDSInner*2; j++) {

  stripInner.setPixelColor(start1, stripInner.Color(200, 200, 0));
  
   if (BoxArray[0].isPressed()) {
    stripInner.setPixelColor(0, stripInner.Color(200, 200, 0));
    RcarInner=0;
    MainStatusInner=1;
  
  } if (BoxArray[1].isPressed()) {
    stripInner.setPixelColor(12, stripInner.Color(200, 200, 0));
    RcarInner=12;
    MainStatusInner=1;
    
  } if (BoxArray[2].isPressed()) {
    stripInner.setPixelColor(23, stripInner.Color(200, 200, 0));
    RcarInner=23;
    MainStatusInner=1;
    
  } if (BoxArray[3].isPressed()) {
    stripInner.setPixelColor(34, stripInner.Color(200, 200, 0));
    RcarInner=34;
    MainStatusInner=1;
    
  } if (BoxArray[4].isPressed()) {
    stripInner.setPixelColor(120, stripInner.Color(200, 200, 0));
    LcarInner=120;
    MainStatusInner=1;
    
  } if (BoxArray[5].isPressed()) {
    stripInner.setPixelColor(131, stripInner.Color(200, 200, 0));
    LcarInner=131;
    MainStatusInner=1;
    
  } if (BoxArray[6].isPressed()) {
    stripInner.setPixelColor(143, stripInner.Color(200, 200, 0));
    LcarInner=143;
    MainStatusInner=1;
  }
 
  if (MainStatusInner==1){
      
      if (currentMillis - previousMillis >= INTERVALL)
    {
      previousMillis = currentMillis;
      
      RightPositionInner++; // = 0; //Position + Rate;
      for(int i=start1; i>RcarInner; i--) {
        setPixelInner(i,((sin(i+RightPositionInner) * 127 + 128)/255)*red,
                        ((sin(i+RightPositionInner) * 127 + 128)/255)*green,
                        ((sin(i+RightPositionInner) * 127 + 128)/255)*blue);
     }

      LeftPositionInner--; // = 0; //Position + Rate;
      for(int i=start1; i<LcarInner; i++) {
        setPixelInner(i,((sin(i+LeftPositionInner) * 127 + 128)/255)*red,
                        ((sin(i+LeftPositionInner) * 127 + 128)/255)*green,
                        ((sin(i+LeftPositionInner) * 127 + 128)/255)*blue);
     }
      
      stripInner.setPixelColor(start1, stripInner.Color(200, 200, 0));
      
      showstripInner();
      
    }    
}
 RcarInner=start1;
 LcarInner=start1;

 stripInner.fill((0,0,0));
 showstripInner();
}
}


void RevRunningLights(byte red, byte green, byte blue, int RcarOuter, int LcarOuter) {
  unsigned long currentMillis = millis();
  static unsigned long previousMillis = 0; 
  int RightPosition=start2;
  int LeftPosition=start2;
 
  for(int j=0; j<NUM_LEDSOuter*2; j++) {
  
       if (BoxArray[7].isPressed()) {
    stripOuter.setPixelColor(32, stripOuter.Color(200, 200, 0));
    RcarOuter=32;
    MainStatusOuter=1;
    
  } if (BoxArray[8].isPressed()) {
    stripOuter.setPixelColor(21, stripOuter.Color(200, 200, 0));
    RcarOuter=21;
    MainStatusOuter=1;
    
  }
  
   
    if (MainStatusOuter==1){


      if (currentMillis - previousMillis >= INTERVALL)
    {
      previousMillis = currentMillis;
      
      RightPosition++; // = 0; //Position + Rate;
      for(int i=start2; i>RcarOuter; i--) {
        setPixelOuter(i,((sin(i+RightPosition) * 127 + 128)/255)*red,
                   ((sin(i+RightPosition) * 127 + 128)/255)*green,
                   ((sin(i+RightPosition) * 127 + 128)/255)*blue);
     }

      LeftPosition--; // = 0; //Position + Rate;
      for(int i=start2; i<LcarOuter; i++) {
        setPixelOuter(i,((sin(i+LeftPosition) * 127 + 128)/255)*red,
                   ((sin(i+LeftPosition) * 127 + 128)/255)*green,
                   ((sin(i+LeftPosition) * 127 + 128)/255)*blue);
     }
      
      stripOuter.setPixelColor(start2, stripOuter.Color(200, 200, 0));
      
      showstripOuter();
      
      
   }
}
 RcarOuter=start2;
 LcarOuter=start2;

 stripOuter.fill((0,0,0));
 showstripOuter();
}
}

void showstripInner() {
 stripInner.show();
}

void showstripOuter() {
 stripOuter.show();
}

void setPixelInner(int PixelInner, byte redInner, byte greenInner, byte blueInner) {
 
   stripInner.setPixelColor(PixelInner, stripInner.Color(redInner, greenInner, blueInner));
}

void setPixelOuter(int PixelOuter, byte redOuter, byte greenOuter, byte blueOuter) {
 
   stripOuter.setPixelColor(PixelOuter, stripOuter.Color(redOuter, greenOuter, blueOuter));
}



Überlege doch mal.
Wozu sind die delay() drin ?

nur rauswerfen bringt nichts. Du musst auch die Zeitsteuerung auf millis() umstellen und evtl. Deine for-Schleifen aufbrechen.
Du bist ja schon eine Weile hier, das hast Du mit Sicherheit schon mal gelsesn.

Gruß Tommy

Hallo,

ich habe ja auf millis() umgestellt.
Es gibt jetzt einen INTERVALL .

Weil Dein Code noch immer nicht sauber ist.
Letzte Hilfe!
Was macht

MainStatusInner
// vs.
MainStatusOuter

Wozu brauchst Du die Variablen?
Was muss mit der passieren?

Raten will ich nicht.
Kommentiere Deinen Code!
Aber richtig.

    BoxArray[i].setDebounceTime(50); // set debounce time to 100 milliseconds

Kommentar überflüssig und zudem falsch.
Kommentare sollen erklären.

Na denn...

Hallo und danke für Eure Hilfe!

Ich habe jetzt mal allen Ballast weggelassen und habe die LED Animation neu angelegt ohne Delay.

Die LEDs sind an. Ich habe aber keine Bewegung/Amination.

#include <Adafruit_NeoPixel.h>

#define PININNEN 2
#define NUM_LEDSINNEN 188
Adafruit_NeoPixel stripInnen = Adafruit_NeoPixel(NUM_LEDSINNEN, PININNEN, NEO_GRB + NEO_KHZ800);


int start1 = 97;


const long INTERVALL = 50;          // interval at which to to refresh x.show();

void setup() {
  stripInnen.begin(); // INITIALIZE NeoPixel
  stripInnen.show(); // Set all pixel colors to 'off'
  stripInnen.setPixelColor(start1, stripInnen.Color(200, 200, 0));
  stripInnen.show(); // Set all pixel colors to 'off'
}

void loop() {
  
  RunningLights(0x00,0xff,0x00, 34);
  
}  
void RunningLights(byte red, byte green, byte blue, int RcarInnen) {
    unsigned long currentMillis = millis();
    static unsigned long previousMillis = 0;        // will store last time x.show() was updated
    int RightPositionInnen=start1;
    

    if (currentMillis - previousMillis >= INTERVALL)
    {
      previousMillis = currentMillis;
      RightPositionInnen++;
      for(int i=start1; i>RcarInnen; i--) {
        setPixelInnen(i,((sin(i+RightPositionInnen) * 127 + 128)/255)*red,
                        ((sin(i+RightPositionInnen) * 127 + 128)/255)*green,
                        ((sin(i+RightPositionInnen) * 127 + 128)/255)*blue);
     }
        showstripInnen();
    }
  }

void showstripInnen() {
  stripInnen.setPixelColor(start1, stripInnen.Color(200, 200, 0));
 stripInnen.show();
}

void setPixelInnen(int PixelInnen, byte red, byte green, byte blue) {
 
   stripInnen.setPixelColor(PixelInnen, stripInnen.Color(red, green, blue));
}

Du hast ja auch nur eine statische Anzeige programmiert. Du wirst wohl einen Zähler mitführen müssen (was vorher die for-Schleife war), um Dynamik rein zu bekommen.

Gruß Tommy

Kann/soll ich das mit einer for-Schleife machen? Wenn ja, an welcher stelle im loop oder in der funktion?

Danke!

Du hast doch Loop als Schleife.
Wenn die Zeit (mit millis) um ist, dann die Anfangsbedingungen (Indexvariable) weiter setzen.
Pseudocode:

// alt
for(int i=0; i<ende;i++) {
  macheWas(i);
}
// neu im loop
static int idx
Wenn Zeit rum {
  idx++;
  macheWas(idx);
}

Ich habe jetzt die Animation nicht analysiert.

Gruß Tommy

Und ich keinerlei Kommentare, was Du das baust.
Was ist denn daran so schwer.

Ok, dann hier mal was ganz komisches.

void RunningLights(byte red, byte green, byte blue, int RcarInnen)
{
  unsigned long currentMillis = millis();
  static unsigned long previousMillis = 0;        // will store last time x.show() was updated
  static uint8_t tik = start1;
  int RightPositionInnen = start1;
  if (currentMillis - previousMillis >= INTERVALL)
  {
    previousMillis = currentMillis;
    RightPositionInnen++;
    if (tik > RcarInnen)
    {
      setPixelInnen(tik, ((sin(tik + RightPositionInnen) * 127 + 128) / 255)*red,
                    ((sin(tik + RightPositionInnen) * 127 + 128) / 255)*green,
                    ((sin(tik + RightPositionInnen) * 127 + 128) / 255)*blue);
      tik--;
      showstripInnen();
    }
    else
    {
      stripInnen.show(); // Set all pixel colors to 'off'
      tik = start1;
    }
  }
}

Achtung: Spiele mal mit dem Intervall.
passiert was?
Ja?
Was?

Hey, danke!

Wenn ich den Intervall verkleinere wird die animation schneller!
Die Animation wird nur ein mal ausgeführt.

Ja!

Und wenn Du das richtig kommentierst, dann kann man Dir auch helfen!

Also nochmal.

Erklärst du es mir bitte!
Ich möchte das gerne Verstehen!

Danke

#include <Adafruit_NeoPixel.h>

#define PININNEN 2            // # define ist böse! Vermutlich soll das ein PIN sein? const uint8_t pinInnen = 2;
#define NUM_LEDSINNEN 188     // # Ich wiederhole mich. Vermutlich die Anzahl der LED's -> Schau wie das oben aussieht
Adafruit_NeoPixel stripInnen = Adafruit_NeoPixel(NUM_LEDSINNEN, PININNEN, NEO_GRB + NEO_KHZ800);


int start1 = 97; // WAS ist das?


const long INTERVALL = 50;          // interval at which to to refresh x.show();

void setup()
{
  stripInnen.begin(); // INITIALIZE NeoPixel
  stripInnen.show(); // Set all pixel colors to 'off' # <- wirklich?
  stripInnen.setPixelColor(start1, stripInnen.Color(200, 200, 0));
  stripInnen.show(); // Set all pixel colors to 'off' # <- ganz bestimmt nicht
}

void loop()
{
  RunningLights(0x00, 0xff, 0x00, 34); // # was passiert hier?
}

void RunningLights(byte red, byte green, byte blue, int RcarInnen)  // # was ist RcarInnen?
{
  unsigned long currentMillis = millis();
  static unsigned long previousMillis = 0;        // will store last time x.show() was updated # <- unnötig, das ergibt sich aus dem Code
  static uint8_t tik = start1;
  int RightPositionInnen = start1;  // # Was ist diese Variable? Wozu ist sie da?
  if (currentMillis - previousMillis >= INTERVALL)
  {
    previousMillis = currentMillis;
    RightPositionInnen++; // # ?? Wenn ich wüsste was die Var macht....
    if (tik > RcarInnen)
    {
      setPixelInnen(tik, ((sin(tik + RightPositionInnen) * 127 + 128) / 255)*red,
                    ((sin(tik + RightPositionInnen) * 127 + 128) / 255)*green,
                    ((sin(tik + RightPositionInnen) * 127 + 128) / 255)*blue);
      tik--;
      showstripInnen(); // # Ich versteh nicht, warum da eine neue Funktion hin muss, wenn es die schon gibt
    }
    else
    {
      stripInnen.show(); // Set all pixel colors to 'off'  # <- Siehste! Falscher Kommentar macht genau das!
      tik = start1;
    }
  }
}

void showstripInnen()
{
  stripInnen.setPixelColor(start1, stripInnen.Color(200, 200, 0));
  stripInnen.show();
}

void setPixelInnen(int PixelInnen, byte red, byte green, byte blue)
{
  stripInnen.setPixelColor(PixelInnen, stripInnen.Color(red, green, blue));
}

Suche nach # - Stell Dir vor, das niemand weiss was Du auf dem Tisch hast!

Vielen Dank für deine Erläuterungen.
Ich habe soweit ich kann alles berücksichtigt.

Hier meine neue Fassung:

#include <Adafruit_NeoPixel.h>

const uint8_t PININNEN = 2;            // # define ist böse! Vermutlich soll das ein PIN sein? const uint8_t pinInnen = 2;
const uint8_t NUM_LEDSINNEN = 188;     // # Ich wiederhole mich. Vermutlich die Anzahl der LED's -> Schau wie das oben aussieht
Adafruit_NeoPixel stripInnen = Adafruit_NeoPixel(NUM_LEDSINNEN, PININNEN, NEO_GRB + NEO_KHZ800);


int start1 = 97; // Startpoint 
const long INTERVALL = 50;          // interval at which to to refresh x.show();

void setup()
{
  stripInnen.begin(); // INITIALIZE NeoPixel
  stripInnen.clear(); // Set all pixel colors to 'off'
  stripInnen.setPixelColor(start1, stripInnen.Color(200, 200, 0));
  stripInnen.show(); // Show startLed
}

void loop()
{
  RunningLights(0x00, 0xff, 0x00, start1); // Define color and Animation endpoint
}

void RunningLights(byte red, byte green, byte blue, int RcarInnen)  // get color and Animation endpoint
{
  unsigned long currentMillis = millis();
  static unsigned long previousMillis = 0;        
  static uint8_t tik = start1;
  int RightPositionInnen = start1;  // Startpoint of animation
  if (currentMillis - previousMillis >= INTERVALL)
  {
    previousMillis = currentMillis;
    RightPositionInnen++; // move animation 
    if (tik > RcarInnen)
    {
      setPixelInnen(tik, ((sin(tik + RightPositionInnen) * 127 + 128) / 255)*red,
                    ((sin(tik + RightPositionInnen) * 127 + 128) / 255)*green,
                    ((sin(tik + RightPositionInnen) * 127 + 128) / 255)*blue);
      tik--;
      showstripInnen(); // # Ich versteh nicht, warum da eine neue Funktion hin muss, wenn es die schon gibt --> Ich habe eine Funkion dafür angelegt weil ich den Pixel start1 immer anhaben möchte
    }
    else
    {
      stripInnen.show(); // Show new position of animation
      tik = start1;
    }
  }
}

void showstripInnen()
{
  stripInnen.setPixelColor(start1, stripInnen.Color(200, 200, 0));
  stripInnen.show();
}

void setPixelInnen(int PixelInnen, byte red, byte green, byte blue)
{
  stripInnen.setPixelColor(PixelInnen, stripInnen.Color(red, green, blue));
}

Ne!
Niemals!
Alt:

    {
      stripInnen.show(); // Show new position of animation
      tik = start1;
    }

Neu:

    {
      stripInnen.clear();
      stripInnen.show(); // Show new position of animation
      tik = start1;
    }

Was passiert?

So und nu Du.
Kommentare kannste in deutsch machen.
Das liest hier jeder.
Und dann alles erläutern.

Scroll mal hier durch:

Vielleicht verstehst was ich vermisse.

Liest sich super!
Zukünftig auf Deutsch!
Danke für deine Hinweise.

Ich habe den neuen sketch ausprobiert. Der läuft jetzt aber gar nicht mehr.

#include <Adafruit_NeoPixel.h>

const uint8_t PININNEN = 2;            // # define ist böse! Vermutlich soll das ein PIN sein? const uint8_t pinInnen = 2;
const uint8_t NUM_LEDSINNEN = 188;     // # Ich wiederhole mich. Vermutlich die Anzahl der LED's -> Schau wie das oben aussieht
Adafruit_NeoPixel stripInnen = Adafruit_NeoPixel(NUM_LEDSINNEN, PININNEN, NEO_GRB + NEO_KHZ800);


int start1 = 97; // Startpoint 
const long INTERVALL = 50;          // interval at which to to refresh x.show();

void setup()
{
  stripInnen.begin(); // INITIALIZE NeoPixel
  stripInnen.clear(); // Set all pixel colors to 'off'
  stripInnen.setPixelColor(start1, stripInnen.Color(200, 200, 0));
  stripInnen.show(); // Show startLed
}

void loop()
{
  RunningLights(0x00, 0xff, 0x00, start1); // Define color and Animation endpoint
}

void RunningLights(byte red, byte green, byte blue, int RcarInnen)  // get color and Animation endpoint
{
  unsigned long currentMillis = millis();
  static unsigned long previousMillis = 0;        
  static uint8_t tik = start1;
  int RightPositionInnen = start1;  // Startpoint of animation
  if (currentMillis - previousMillis >= INTERVALL)
  {
    previousMillis = currentMillis;
    RightPositionInnen++; // move animation 
    if (tik > RcarInnen)
    {
      setPixelInnen(tik, ((sin(tik + RightPositionInnen) * 127 + 128) / 255)*red,
                    ((sin(tik + RightPositionInnen) * 127 + 128) / 255)*green,
                    ((sin(tik + RightPositionInnen) * 127 + 128) / 255)*blue);
      tik--;
      showstripInnen(); // # Ich versteh nicht, warum da eine neue Funktion hin muss, wenn es die schon gibt --> Ich habe eine Funkion dafür angelegt weil ich den Pixel start1 immer anhaben möchte
    }
    else
    {
      stripInnen.clear();
      stripInnen.show(); // Show new position of animation
      tik = start1;
    }
  }
}

void showstripInnen()
{
  stripInnen.setPixelColor(start1, stripInnen.Color(200, 200, 0));
  stripInnen.show();
}

void setPixelInnen(int PixelInnen, byte red, byte green, byte blue)
{
  stripInnen.setPixelColor(PixelInnen, stripInnen.Color(red, green, blue));
}```