/*
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);
}
}