FastLED Shisha Unterstetzer

Hallo

Ich wollte mir mit Hilfe der WS2812B LEDs und dem Arduino einen Kleinen Beleuchteten Shisha Untersetzter Bauen.
zu dem zweg habe ich erstmal mir einen mit WS2812B bestückten LED-Strip bestellt um mit diesen anzufangen mit hilfe der IDE zu programmieren. Da ich ein Anfänger im Bereich Programmieren bin, wollte ich es mit learning by doing probieren.Naja, ein teil der von mir erhoften Funktionen, funktionieren zum glück schon. Jetzt Bäuchte ich Hilfe beim weiterfüren.

Folgendes kann er schon:
zwischen 6 Modies Wechseln (Aus, Weiß, Rot, Grün, Blau, Rainbow, Wanderendes Licht)
Mit zwei Tasten steuerbar.

Folgendes bekomme ich leider nicht hin.
Bei Wanderendes Licht jederzeit schalten. (Funktioniert im moment nur wenn die letzte LED am leuchten ist)
Dynamisches Farbspiel, zB Fire2012, DemoReel100. (mit einfach anheften hat es leider nicht wie gehofft funkioniert:(.
Einen Fade mode der die farben langsam wechselt

//FastLED-Bereich
#include "FastLED.h"


#define NUM_LEDS 61 // Anzahl der leds im Stripe
#define DATA_PIN 5  // Data out
#define BRIGHTNESS          96
#define FRAMES_PER_SECOND  120
CRGB leds[NUM_LEDS];

//Steuerungsbereich
const int Tasterhigh= 13; // Taster für im Modus hochschalten
const int Tasterlow= 8;  // Taster für im Modus runterschalten
int lichtmodus = 0;        
int TasterLowStatus = LOW;
int TasterHighStatus = LOW;



void setup() { 
      
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
 FastLED.setBrightness(BRIGHTNESS);

pinMode (Tasterhigh, INPUT);
pinMode (Tasterlow, INPUT);}




void loop() {
  digitalWrite(Tasterhigh, HIGH);
  digitalWrite(Tasterlow, HIGH); 
  TasterLowStatus = digitalRead(Tasterlow);
  TasterHighStatus = digitalRead(Tasterhigh); 

  if (TasterLowStatus == LOW)
  {lichtmodus--;
  delay(300);}
 
  if (TasterHighStatus == LOW)
  {lichtmodus++;
  delay(300);}

if (lichtmodus == 0)                             //AUS
{  fill_solid( &(leds[0]), 61 , CRGB( 0,0 , 0) );
FastLED.show();}

else if (lichtmodus == 1)                       //Weiß 
 {fill_solid( &(leds[0]), 61 , CRGB( 255, 255, 255) );
FastLED.show();}

else if (lichtmodus == 2)                       //Rot
 {fill_solid( &(leds[0]), 61 , CRGB( 255, 0, 0) );
FastLED.show();}

else if (lichtmodus == 3)                        //Grün
 {fill_solid( &(leds[0]), 61 /, CRGB( 0, 255, 0) );
FastLED.show();}

else if (lichtmodus == 4)                       //Blau
{  fill_solid( &(leds[0]), 61 , CRGB( 0, 0, 255) );
FastLED.show();}

else if (lichtmodus == 5)                     //Rainbow
  {fill_rainbow( &(leds[0]), 61 , 255 );
  FastLED.show();}

else if (lichtmodus == 6)                   //Wanderendes Licht
{ for(int dot = 0; dot < NUM_LEDS; dot++) { 
            leds[dot] = CRGB::White;
            FastLED.show();
            leds[dot] = CRGB::Black;
            delay(30);}

}

else
{
  lichtmodus = 0;
  }
}

Danke schonmal in vorraus auch für verbesserungsvorschläge

Programmierstrategie ändern. Das mit den delays ist der erste große Fehler, den man am anfang machen kannen. Hier sollte dir das BlinkWithoutDelay Tutorial helfen.

Ohne ein delay bekomme ich jetzt die Schalter nicht enbrellt und leider auch nicht das Wanderende Licht nicht so wie ich es gerne Hätte

So kommt es immer Sporadisch an einer stelle

else if (lichtmodus == 6)                   //Wanderendes Licht
{
            
  for(int dot = 0; dot < NUM_LEDS; dot++) { 
             if (millis() - previousMillis > interval){
            previousMillis = millis();
            leds[dot] = CRGB::White;
            FastLED.show();
         
            leds[dot] = CRGB::Black;
            ;}

            }
}

und so läuft es zu schnell und macht am ende eine Pause

else if (lichtmodus == 6)                   //Wanderendes Licht
{
 if (millis() - previousMillis > interval){
            previousMillis = millis();           
  for(int dot = 0; dot < NUM_LEDS; dot++) { 
             
            leds[dot] = CRGB::White;
            FastLED.show();
         
            leds[dot] = CRGB::Black;
            ;}

            }
}