Hilfe gesucht. Problem mit dem Code. Kein Fehler aber keine Funktion

Hallo zusammen,

dies ist mein erster Beitrag. Kurz zu meiner Person: Ich mache ab und an für mich selbst kleine Projekte. Leider bringe ich keinerlei Erfahrung in der Elektronik udgl. mit. Den Code habe ich mit Hilfe von Beispielen der IDE und der Hilfe von ChatGPT zusammengebastelt.

Projekt: LED Belechtung für einen Klemmbausteinschaukasten.
Aufbau:
Board: AZ-ATmega328
-Stromversorgung: 5V 2A
Led: ws2812b
Display: OLED 0,93Zoll 128x64 (SSD1306)
Knöpfe: Taster

Arduino IDE 2.3.6
Lib:

  • Adafruit SSD1306 2.5.15 + dazugehörigem
  • Adafruit NeoPixel 1.15.1

Schaltplan (bitte verzeiht, hoffentlich ist es entzifferbar)

Zum eigentlichen Thema:
Wenn das Board Strom erhält (USB-C) soll das Display eine Begrüßung zeigen.
Dann möchte ich die Beleuchtung beim Drücken von Button I (Pin2) einschalten, bei erneutem Drücken ausschalten. Beim Einschalten als Lauflicht von 0-150, beim Ausschalten alle gleichzeitig.
Am Display soll "Status: EIN" oder "Status: AUS" stehen, je nach Drücken von Button I.
Wenn das Lauflicht durchgelaufen ist und alle Led leuchten, soll beim Drücken von Button II (Pin3) die Farbe gewechselt werden (6 Farben).
=>>>> Bis hier hin funktioniert was ich erwartet habe.

#include <Adafruit_NeoPixel.h>
#include <Adafruit_SSD1306.h>
#include <wire.h>
#ifdef _AVR_
#include <avr/power.h>
#endif

const int LED_PIN = 6; // Datenpin für den LED Streifen
const int NUM_LEDS = 151; // Anzahl verwendeter LEDs
const int POWER_BUTTON_PIN = 2; // Einschalten, Ausschalten -Taster
const int COLOR_BUTTON_PIN = 3; // Farbwechsel (6Farben) - Taster

Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);

bool powerOn = false;
bool lauflichtAktiv = false;
int lauflichtPosition = 0;
unsigned long letzteAktion = 0;
unsigned long letzteFarbAktion = 0;
int farbe = 0;

void setup() {
  strip.begin();
  strip.show();
  pinMode(POWER_BUTTON_PIN, INPUT_PULLUP);
  pinMode(COLOR_BUTTON_PIN, INPUT_PULLUP);

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(100);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(5, 12);
  display.println("HALLO LUKAS!");
  display.display();
}

void loop() {
  if (digitalRead(POWER_BUTTON_PIN) == LOW && millis() - letzteAktion > 200) {
    letzteAktion = millis();
    powerOn = !powerOn;
    if (powerOn) {
      lauflichtAktiv = true;
      lauflichtPosition = 0;
      display.clearDisplay();
      display.setTextSize(1);
      display.setTextColor(SSD1306_WHITE);
      display.setCursor(0, 0);
      display.println("Status: EIN");
      display.display();
    } else {
      lauflichtAktiv = false;
      strip.clear();
      strip.show();
      display.clearDisplay();
      display.setTextSize(1);
      display.setTextColor(SSD1306_WHITE);
      display.setCursor(0, 0);
      display.println("Status: AUS");
      display.display();
    }
  }

  if (digitalRead(COLOR_BUTTON_PIN) == LOW && millis() - letzteFarbAktion > 200 && !lauflichtAktiv) {
  letzteFarbAktion = millis();
  farbe = (farbe + 1) % 6;
  lauflichtAktiv = true;
  lauflichtPosition = 0;
}



  if (powerOn && lauflichtAktiv) {
    switch (farbe) {
      case 0:
        strip.setPixelColor(lauflichtPosition, strip.Color(255, 0, 0)); // Rot
        break;
      case 1:
        strip.setPixelColor(lauflichtPosition, strip.Color(0, 255, 0)); // Grün
        break;
      case 2:
        strip.setPixelColor(lauflichtPosition, strip.Color(0, 255, 255)); // Cyan
        break;
      case 3:
        strip.setPixelColor(lauflichtPosition, strip.Color(255, 0, 255)); // Magenta
        break;
      case 4:
        strip.setPixelColor(lauflichtPosition, strip.Color(255, 255, 0)); // Gelb
        break;
      case 5:
        strip.setPixelColor(lauflichtPosition, strip.Color(255, 255, 255)); // Weiß
        break;
        
    }


    strip.show();
    lauflichtPosition++;
    if (lauflichtPosition >= NUM_LEDS) {
      lauflichtAktiv = false;
    }
    delay(50);
}
}

Zum Problem:
Ich möchte nun die Button IV(Pin7) und V(pin8) in den Code integrieren. Wenn ich den Code erweitere und Kompiliere, wird alles als Ok angezeigt. Das Hochladen aufs Board klappt.
Nach dem Hochladen ist das Display aber schwarz und die Buttons reagieren nicht mehr.
Ich habe versucht mittels Debug herauszufinden was schieflauft, jedoch stehe ich hier an.
Der Code bricht einfach vorm Schreiben aufs Display ab.

#include <Adafruit_NeoPixel.h>
#include <avr/power.h>
#include <Adafruit_SSD1306.h>
#ifdef __AVR__
#include <Wire.h>
#endif

const int LED_PIN = 6;
const int NUM_LEDS = 151;
const int POWER_BUTTON_PIN = 2;
const int COLOR_BUTTON_PIN = 3;
const int BRIGHTNESS_BUTTON_PIN_PLUS = 7; // Helligkeit rauf - Taster
const int BRIGHTNESS_BUTTON_PIN_MINUS = 8; // Helligkeit runter - Taster

Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
int brightness = 128;
int maxBrightness = 255;
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);

bool powerOn = false;
bool lauflichtAktiv = false;
int lauflichtPosition = 0;
unsigned long letzteAktion = 0;
unsigned long letzteFarbAktion = 0;
unsigned long letzteHelligkeitsAktion = 0;
int farbe = 0;


void changeBrightness(int delta) {
  brightness += delta;
  if (brightness > 128) {
    brightness = 128;
  } else if (brightness < 5) {
    brightness = 5;
  }
  strip.setBrightness(brightness);
  strip.show();
}

void setup() {
  Serial.begin(9600);
  Serial.println("Setup läuft");
  strip.begin();
  strip.show();
  strip.setBrightness(brightness);
  pinMode(POWER_BUTTON_PIN, INPUT_PULLUP);
  pinMode(COLOR_BUTTON_PIN, INPUT_PULLUP);
  pinMode(BRIGHTNESS_BUTTON_PIN_PLUS, INPUT_PULLUP);
  pinMode(BRIGHTNESS_BUTTON_PIN_MINUS, INPUT_PULLUP);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  Serial.println("Display initialisiert");
  display.display();
  Serial.println("Display display aufgerufen");
  delay(100);
  display.clearDisplay();
  delay(100);
  Serial.println("Display clearDisplay aufgerufen");
  delay(100);
  Serial.println("Display wird konfiguriert..."); 
  display.setTextSize(1);
  delay(100);
  Serial.println("Textgröße gesetzt");
  display.setTextColor(SSD1306_WHITE);
  Serial.println("Textfarbe gesetzt");
// bis hier läuft der Code mit Debug Ausgabe, dann kommt nichts mehr.
// Die Delays habe ich nachträglich eingebaut, da beim Debuggen mitten
// in der Ausgabe abgebrochen wurde - bei "Display clearDisplay aufgerufen"
// kam nur mehr "Disp". Nach den Delays kam das programm bis "Textgröße gesetzt".
// Weiter kam ich nicht, auch mit mehr Delay nicht.
  delay(100);
  display.setCursor(5, 12);
  delay(100);
  display.println("Status: HALLO LUKAS!");
  delay(100);
  Serial.println("Text auf Display geschrieben");
  display.display();
  Serial.println("Display display erneut aufgerufen");
}



void loop() {
  Serial.println("Loop läuft");
  if (digitalRead(POWER_BUTTON_PIN) == LOW && millis() - letzteAktion > 200) {
    letzteAktion = millis();
    powerOn = !powerOn;
    if (powerOn) {
      lauflichtAktiv = true;
      lauflichtPosition = 0;
      display.clearDisplay();
      display.setTextSize(1);
      display.setTextColor(SSD1306_WHITE);
      display.setCursor(0, 0);
      display.println("Status: EIN");
      display.display();
    } else {
      lauflichtAktiv = false;
      strip.clear();
      strip.show();
      display.clearDisplay();
      display.setTextSize(1);
      display.setTextColor(SSD1306_WHITE);
      display.setCursor(0, 0);
      display.println("Status: AUS");
      display.display();
    }
  }

  if (digitalRead(COLOR_BUTTON_PIN) == LOW && millis() - letzteFarbAktion > 200 && !lauflichtAktiv) {
    letzteFarbAktion = millis();
    farbe = (farbe + 1) % 6;
    lauflichtAktiv = true;
    lauflichtPosition = 0;
  }

  


  if (digitalRead(BRIGHTNESS_BUTTON_PIN_PLUS) == LOW && millis() - letzteHelligkeitsAktion > 200) {
    Serial.println("Helligkeitsbutton + gedrückt");
    letzteHelligkeitsAktion = millis();
    brightness += 20;
    if (brightness > 100) {
      brightness = 100;
    }
    strip.setBrightness(map(brightness, 0, 100, 0, 255));
  }

  if (digitalRead(BRIGHTNESS_BUTTON_PIN_MINUS) == LOW && millis() - letzteHelligkeitsAktion > 200) {
    letzteHelligkeitsAktion = millis();
    brightness -= 20;
    if (brightness < 5) {
      brightness = 5;
    }
    strip.setBrightness(map(brightness, 0, 100, 0, 255));
  }

  if (powerOn && lauflichtAktiv) {
    switch (farbe) {
      case 0:
        strip.setPixelColor(lauflichtPosition, strip.Color(255, 0, 0)); // Rot
        break;
      case 1:
        strip.setPixelColor(lauflichtPosition, strip.Color(0, 255, 0)); // Grün
        break;
      case 2:
        strip.setPixelColor(lauflichtPosition, strip.Color(0, 255, 255)); // Cyan
        break;
      case 3:
        strip.setPixelColor(lauflichtPosition, strip.Color(255, 0, 255)); // Magenta
        break;
      case 4:
        strip.setPixelColor(lauflichtPosition, strip.Color(255, 255, 0)); // Gelb
        break;
      case 5:
        strip.setPixelColor(lauflichtPosition, strip.Color(255, 255, 255)); // Weiß
        break;
  }
  strip.show();
  lauflichtPosition++;
  if (lauflichtPosition >= NUM_LEDS) {
    lauflichtAktiv = false;
  }
  delay(50);
}
}

Ich verstehe leider nicht, was ich falsch gemacht habe. ChatGPT meint auch, dass er keinen Fehler entdecken kann...

Bitte um Unterstützung, vielen Dank.

Das heisst, auch “HALLO LUKAS” erscheint nicht?

Und was zeigt der SerialMonitor?

Generell ist “seltsames Verhalten” gerne mal durch zu wenig RAM Speicher verursacht, aber da unterschieden sich deine zwei Sketche nicht sehr, bevor du die Testausgaben eingefügt hast, oder? Zeig mal den RAM-Bedarf, und verkürze NUM_LEDS zum Test auf 50…

Ein Problem ist:

Du hast 150stück WS2812B. Wenn diese weiß leuchten verbrauchen sie 60mA. Alle zusammen sind das 9A. Dein Netzteil schafft 2A. Die Sicherung nach der USB Buchse (falls der Nachbau sich an den Schaltplan des orginalen Arduino UNO R3 hält) löst bei 0,5A aus. Du mußt die WS2812B von einem genügend starken Netzteil versorgen und GND des Netzteils mit GND des UNO verbinden. Ohne zusätzliches Netzteil kannst Du 8 WS2812B verwenden.

Grüße Uwe

Dein Sketch stürzt ab und der Uno wird resettet.
Das liegt vermutlich an der Library für die Leds. Ich kann es leider nicht komplett testen, aber wenn ich eine leere loop() einsetze und die Neopixel komplett rauskommentiere, läuft das Setup durch.

@uwefed
Ich habe es ohne die Leds getestet und er stürzt ab.
Irgendwie passen die Libs nicht zusammen.

Nachtrag:
Auch das Display zeigt dann etwas an.

Nachtrag 2:
Und es liegt tatsächlich am Ram. Sobald ich mehr wie 40 Num_Leds eintrage, erfolgt der Absturz.
Wenn du für die Strings das F-Makro verwendest, wird es sicher etwas besser.

Vergiss alles was hier stand - Deine Display-Lib frisst Dir den Speicher auf.
ist die raus, läuft der Sketch mit 300 LED und mehr LED's noch fehlerfrei durch.

Versuch mal:

#include <Adafruit_NeoPixel.h>
#include <avr/power.h>
//#include <Adafruit_SSD1306.h>
#ifdef __AVR__
  #include <Wire.h>
#endif

const int LED_PIN = 6;
const int NUM_LEDS = 151;
const int POWER_BUTTON_PIN = 2;
const int COLOR_BUTTON_PIN = 3;
const int BRIGHTNESS_BUTTON_PIN_PLUS = 7; // Helligkeit rauf - Taster
const int BRIGHTNESS_BUTTON_PIN_MINUS = 8; // Helligkeit runter - Taster

Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
uint8_t brightness = 128;
const uint8_t maxBrightness = 255;
//Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);

bool powerOn = false;
bool lauflichtAktiv = false;
uint8_t lauflichtPosition = 0;
unsigned long letzteAktion = 0;
unsigned long letzteFarbAktion = 0;
unsigned long letzteHelligkeitsAktion = 0;
uint8_t farbe = 0;

void changeBrightness(uint8_t delta)
{
  brightness += delta;

  if (brightness > 128)
  {
    brightness = 128;
  }
  else if (brightness < 5)
  {
    brightness = 5;
  }

  strip.setBrightness(brightness);
  strip.show();
}

void setup()
{
  Serial.begin(9600);
  Serial.println("Setup läuft");
  pinMode(POWER_BUTTON_PIN, INPUT_PULLUP);
  pinMode(COLOR_BUTTON_PIN, INPUT_PULLUP);
  pinMode(BRIGHTNESS_BUTTON_PIN_PLUS, INPUT_PULLUP);
  pinMode(BRIGHTNESS_BUTTON_PIN_MINUS, INPUT_PULLUP);
  //display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  Serial.println(F("Display initialisiert"));
  //display.display();
  Serial.println(F("Display display aufgerufen"));
  delay(100);
  //display.clearDisplay();
  delay(100);
  Serial.println(F("Display clearDisplay aufgerufen"));
  delay(100);
  Serial.println(F("Display wird konfiguriert..."));
  //display.setTextSize(1);
  delay(100);
  Serial.println(F("Textgröße gesetzt"));
  //display.setTextColor(SSD1306_WHITE);
  //Serial.println(F("Textfarbe gesetzt"));
  delay(100);
  //display.setCursor(5, 12);
  delay(100);
  //display.println(F("Status: HALLO LUKAS!"));
  delay(100);
  Serial.println(F("Text auf Display geschrieben"));
  //display.display();
  Serial.println(F("Display display erneut aufgerufen"));
  strip.begin();
  strip.show();
  strip.setBrightness(brightness);
}
void heartBeat(const uint32_t tik)
{
  static uint32_t lastTik = 0;

  if (millis() - lastTik > tik)
  {
    lastTik = millis();
    Serial.println(F("tik"));
  }
}

void loop()
{
  heartBeat(500);

  if (digitalRead(POWER_BUTTON_PIN) == LOW && millis() - letzteAktion > 200)
  {
    letzteAktion = millis();
    powerOn = !powerOn;

    if (powerOn)
    {
      lauflichtAktiv = true;
      lauflichtPosition = 0;
/*
      display.clearDisplay();
      display.setTextSize(1);
      display.setTextColor(SSD1306_WHITE);
      display.setCursor(0, 0);
      display.println(F("Status: EIN"));
      display.display();
*/
    }
    else
    {
      lauflichtAktiv = false;
      strip.clear();
      strip.show();
/*
      display.clearDisplay();
      display.setTextSize(1);
      display.setTextColor(SSD1306_WHITE);
      display.setCursor(0, 0);
      display.println(F("Status: AUS"));
      display.display();
*/
}
  }

  if (digitalRead(COLOR_BUTTON_PIN) == LOW && millis() - letzteFarbAktion > 200 && !lauflichtAktiv)
  {
    letzteFarbAktion = millis();
    farbe = (farbe + 1) % 6;
    lauflichtAktiv = true;
    lauflichtPosition = 0;
  }

  if (digitalRead(BRIGHTNESS_BUTTON_PIN_PLUS) == LOW && millis() - letzteHelligkeitsAktion > 200)
  {
    Serial.println(F("Helligkeitsbutton + gedrückt"));
    letzteHelligkeitsAktion = millis();
    brightness += 20;

    if (brightness > 100)
    {
      brightness = 100;
    }

    strip.setBrightness(map(brightness, 0, 100, 0, 255));
  }

  if (digitalRead(BRIGHTNESS_BUTTON_PIN_MINUS) == LOW && millis() - letzteHelligkeitsAktion > 200)
  {
    letzteHelligkeitsAktion = millis();
    brightness -= 20;

    if (brightness < 5)
    {
      brightness = 5;
    }

    strip.setBrightness(map(brightness, 0, 100, 0, 255));
  }

  if (powerOn)
  {
    if (lauflichtAktiv)
    {
      if (lauflichtPosition < NUM_LEDS)
      {
        switch (farbe)
        {
          case 0:
            strip.setPixelColor(lauflichtPosition, strip.Color(255, 0, 0)); // Rot
            break;

          case 1:
            strip.setPixelColor(lauflichtPosition, strip.Color(0, 255, 0)); // Grün
            break;

          case 2:
            strip.setPixelColor(lauflichtPosition, strip.Color(0, 255, 255)); // Cyan
            break;

          case 3:
            strip.setPixelColor(lauflichtPosition, strip.Color(255, 0, 255)); // Magenta
            break;

          case 4:
            strip.setPixelColor(lauflichtPosition, strip.Color(255, 255, 0)); // Gelb
            break;

          case 5:
            strip.setPixelColor(lauflichtPosition, strip.Color(255, 255, 255)); // Weiß
            break;
        }

        strip.show();
        lauflichtPosition++;
      }
      else
      {
        lauflichtPosition = 0;
        lauflichtAktiv = false;
      }

      delay(50);
    }
  }
}

Ich hatte mich nicht mit dem Sketch befasst und nur das Spätere Problem mit der Stromversorgung aufgezeigt.

Grüße Uwe

Ok, das ist auch wichtig, wenn es mal läuft.
Es sieht so aus als ob es am ungenügenden RAM liegt.

Weiter kann ich aktuell auch nicht untersuchen.

Nein.
Es ist die Display-Lib.

Wie schon von mir geschrieben:

du kannst eine andere Library für das Display verwenden.
diese hier ist nicht so speicherhungrig und funktioniert bei mir mit der NeoPixel-Library und auch deinen 151 Pixel.
Ich habe es nur mit dem Setup (Beispiel aus der Library) getestet.
Deine Loop() darfst du dann nach deinen Wünschen erweitern.

#include <Adafruit_NeoPixel.h>
#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"

#define I2C_ADDRESS 0x3C

// Define proper RST_PIN if required.
#define RST_PIN -1

SSD1306AsciiWire oled;


const int LED_PIN = 6;
const int NUM_LEDS = 151;
const int POWER_BUTTON_PIN = 2;
const int COLOR_BUTTON_PIN = 3;
const int BRIGHTNESS_BUTTON_PIN_PLUS = 7; // Helligkeit rauf - Taster
const int BRIGHTNESS_BUTTON_PIN_MINUS = 8; // Helligkeit runter - Taster

Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
int brightness = 128;
int maxBrightness = 255;

bool powerOn = false;
bool lauflichtAktiv = false;
int lauflichtPosition = 0;
unsigned long letzteAktion = 0;
unsigned long letzteFarbAktion = 0;
unsigned long letzteHelligkeitsAktion = 0;
int farbe = 0;


void changeBrightness(int delta) {
  brightness += delta;
  if (brightness > 128) {
    brightness = 128;
  } else if (brightness < 5) {
    brightness = 5;
  }
  strip.setBrightness(brightness);
  strip.show();
}

void setup() 
{
  Serial.begin(115200);
  Serial.println("Setup läuft");
  strip.begin();
  strip.show();
  strip.setBrightness(brightness);
  pinMode(POWER_BUTTON_PIN, INPUT_PULLUP);
  pinMode(COLOR_BUTTON_PIN, INPUT_PULLUP);
  pinMode(BRIGHTNESS_BUTTON_PIN_PLUS, INPUT_PULLUP);
  pinMode(BRIGHTNESS_BUTTON_PIN_MINUS, INPUT_PULLUP);

  Wire.begin();
  Wire.setClock(400000L);
  oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);
  Serial.println("Display initialisiert");

  oled.setFont(System5x7);
  oled.clear();
  oled.print("Hello world!");

  Serial.println("Setup Ende, loop startet...");
}

Moin @tryout84 ,

neben der "speicherhungrigen" SSD1306 Library verbrauchen die Texte in den Print-Anweisungen wertvollen RAM-Speicher. Durch die Verwendung des F()-Makros, mit dem die Texte direkt aus dem Flashspeicher gelesen werden, können immerhin ohne weitere Änderungen am Code 106 Led angesteuert werden:

Siehe hier bei Wokwi: https://wokwi.com/projects/440180756537835521

Mit der von @HotSystems vorgeschlagenen Lib sind auch 256 Leds möglich (hier habe ich die Obergrenze nicht untersucht):

siehe bei Wokwi: https://wokwi.com/projects/440182197727033345

Der an @HotSystems Vorschlage angepasste Sketch
/*
  Forum: https://forum.arduino.cc/t/hilfe-gesucht-problem-mit-dem-code-kein-fehler-aber-keine-funktion/1403916
  Wokwi: https://wokwi.com/projects/440182197727033345

  2025/08/24
  ec2021

  Mit der Änderung der SSD1306 Library und der Anwendung des F()-Makros sind 256 Leds problemlos ansteuerbar.

  Für einen schnelleren Durchlauf wurde das delay() in der loop auskommentiert.

*/

#include <Adafruit_NeoPixel.h>
#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"

#define I2C_ADDRESS 0x3C

// Define proper RST_PIN if required.
#define RST_PIN -1

SSD1306AsciiWire oled;


const int LED_PIN = 6;
const int NUM_LEDS = 256;
const int POWER_BUTTON_PIN = 2;
const int COLOR_BUTTON_PIN = 3;
const int BRIGHTNESS_BUTTON_PIN_PLUS = 7; // Helligkeit rauf - Taster
const int BRIGHTNESS_BUTTON_PIN_MINUS = 8; // Helligkeit runter - Taster

Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
int brightness = 128;
int maxBrightness = 255;

bool powerOn = false;
bool lauflichtAktiv = false;
int lauflichtPosition = 0;
unsigned long letzteAktion = 0;
unsigned long letzteFarbAktion = 0;
unsigned long letzteHelligkeitsAktion = 0;
int farbe = 0;


void changeBrightness(int delta) {
  brightness += delta;
  if (brightness > 128) {
    brightness = 128;
  } else if (brightness < 5) {
    brightness = 5;
  }
  strip.setBrightness(brightness);
  strip.show();
}

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Setup läuft"));
  strip.begin();
  strip.show();
  strip.setBrightness(brightness);
  pinMode(POWER_BUTTON_PIN, INPUT_PULLUP);
  pinMode(COLOR_BUTTON_PIN, INPUT_PULLUP);
  pinMode(BRIGHTNESS_BUTTON_PIN_PLUS, INPUT_PULLUP);
  pinMode(BRIGHTNESS_BUTTON_PIN_MINUS, INPUT_PULLUP);

  Wire.begin();
  Wire.setClock(400000L);
  oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);
  Serial.println(F("Display initialisiert"));

  oled.setFont(System5x7);
  oled.clear();
  oled.print(F("Hello world!"));

  Serial.println(F("Setup Ende, loop startet..."));
}




void loop() {
  Serial.println(F("Loop läuft"));
  if (digitalRead(POWER_BUTTON_PIN) == LOW && millis() - letzteAktion > 200) {
    letzteAktion = millis();
    powerOn = !powerOn;
    if (powerOn) {
      lauflichtAktiv = true;
      lauflichtPosition = 0;
      oled.clear();
      oled.println(F("Status: EIN"));
    } else {
      lauflichtAktiv = false;
      strip.clear();
      strip.show();
      oled.clear();
      oled.println(F("Status: AUS"));
    }
  }

  if (digitalRead(COLOR_BUTTON_PIN) == LOW && millis() - letzteFarbAktion > 200 && !lauflichtAktiv) {
    letzteFarbAktion = millis();
    farbe = (farbe + 1) % 6;
    lauflichtAktiv = true;
    lauflichtPosition = 0;
  }




  if (digitalRead(BRIGHTNESS_BUTTON_PIN_PLUS) == LOW && millis() - letzteHelligkeitsAktion > 200) {
    Serial.println(F("Helligkeitsbutton + gedrückt"));
    letzteHelligkeitsAktion = millis();
    brightness += 20;
    if (brightness > 100) {
      brightness = 100;
    }
    strip.setBrightness(map(brightness, 0, 100, 0, 255));
  }

  if (digitalRead(BRIGHTNESS_BUTTON_PIN_MINUS) == LOW && millis() - letzteHelligkeitsAktion > 200) {
    letzteHelligkeitsAktion = millis();
    brightness -= 20;
    if (brightness < 5) {
      brightness = 5;
    }
    strip.setBrightness(map(brightness, 0, 100, 0, 255));
  }

  if (powerOn && lauflichtAktiv) {
    switch (farbe) {
      case 0:
        strip.setPixelColor(lauflichtPosition, strip.Color(255, 0, 0)); // Rot
        break;
      case 1:
        strip.setPixelColor(lauflichtPosition, strip.Color(0, 255, 0)); // Grün
        break;
      case 2:
        strip.setPixelColor(lauflichtPosition, strip.Color(0, 255, 255)); // Cyan
        break;
      case 3:
        strip.setPixelColor(lauflichtPosition, strip.Color(255, 0, 255)); // Magenta
        break;
      case 4:
        strip.setPixelColor(lauflichtPosition, strip.Color(255, 255, 0)); // Gelb
        break;
      case 5:
        strip.setPixelColor(lauflichtPosition, strip.Color(255, 255, 255)); // Weiß
        break;
    }
    strip.show();
    lauflichtPosition++;
    if (lauflichtPosition >= NUM_LEDS) {
      lauflichtAktiv = false;
    }
    //delay(50);
  }
}

Viel Erfolg!
ec2021

Danke dir für deine Mühe.
Damit sollte der TO jetzt zurecht kommen.