/*
#include <FastLED.h>
#define PIN 21 // Pin, an dem der LED-Ring angeschlossen ist
#define NUMPIXELS 16 // Anzahl der LEDs im Ring
#define POT_PIN 12 // Pin, an dem das Geschwindigkeits-Potentiometer angeschlossen ist
#define NUMFULLYLIT_PIN 14 // Pin, an dem das NUMFULLYLIT-Potentiometer angeschlossen ist
#define BRIGHTNESS_PIN 34 // Pin, an dem das Helligkeits-Potentiometer angeschlossen ist
CRGB leds[NUMPIXELS];
void setup() {
FastLED.addLeds<NEOPIXEL, PIN>(leds, NUMPIXELS);
pinMode(POT_PIN, INPUT);
pinMode(NUMFULLYLIT_PIN, INPUT);
pinMode(BRIGHTNESS_PIN, INPUT);
}
void loop() {
int potValue = analogRead(POT_PIN); // Wert des Geschwindigkeits-Potentiometers lesen
int delayTime = map(potValue, 0, 4095, 100, 0); // Anpassen der Verzögerungszeit basierend auf dem Potentiometerwert
int numFullyLitValue = analogRead(NUMFULLYLIT_PIN); // Wert des NUMFULLYLIT-Potentiometers lesen
int numFullyLit = map(numFullyLitValue, 0, 4095, 1, NUMPIXELS); // Anpassen von NUMFULLYLIT basierend auf dem Potentiometerwert
int brightnessValue = analogRead(BRIGHTNESS_PIN); // Wert des Helligkeits-Potentiometers lesen
int brightness = map(brightnessValue, 0, 4095, 0, 255); // Anpassen der Helligkeit basierend auf dem Potentiometerwert
FastLED.setBrightness(brightness);
for (int i = 0; i < NUMPIXELS; i++) {
updateLEDs(i, numFullyLit, 255, 0, 0); // Rotes Licht mit Dimmeffekt
delay(delayTime);
}
}
void updateLEDs(int position, int numFullyLit, uint8_t red, uint8_t green, uint8_t blue) {
FastLED.clear(); // Alle LEDs ausschalten
int step = NUMPIXELS / numFullyLit;
for (int i = 0; i < NUMPIXELS; i++) {
int brightness = calculateBrightness(i, position, step, numFullyLit);
leds[i] = CRGB(red * brightness / 255, green * brightness / 255, blue * brightness / 255);
}
FastLED.show();
}
int calculateBrightness(int ledIndex, int position, int step, int numFullyLit) {
for (int j = 0; j < numFullyLit; j++) {
int fullyLitPosition = (position + j * step) % NUMPIXELS;
if (ledIndex == fullyLitPosition) {
return 255; // 100% Helligkeit
}
int nextFullyLitPosition = (fullyLitPosition + step) % NUMPIXELS;
int midPoint = (fullyLitPosition + step / 2) % NUMPIXELS;
if (ledIndex == midPoint) {
return 0; // 0% Helligkeit
}
int distance = min(abs(ledIndex - fullyLitPosition), NUMPIXELS - abs(ledIndex - fullyLitPosition));
if (distance < step / 2) {
return map(distance, 0, step / 2, 255, 0); // Stufenweise Dimmung
}
}
return 0; // Standardmäßig ausgeschaltet
}
*/
/*
--------------------------------------------
#include <FastLED.h>
#define PIN1 21 // Pin, an dem der erste LED-Ring angeschlossen ist
#define PIN2 19 // Pin, an dem der zweite LED-Ring angeschlossen ist
#define PIN3 26 // Pin, an dem der dritte LED-Ring angeschlossen ist
#define NUMPIXELS 16 // Anzahl der LEDs in jedem Ring
#define POT_PIN 12 // Pin, an dem das Geschwindigkeits-Potentiometer angeschlossen ist
#define NUMFULLYLIT_PIN 14 // Pin, an dem das NUMFULLYLIT-Potentiometer angeschlossen ist
#define BRIGHTNESS_PIN 34 // Pin, an dem das Helligkeits-Potentiometer angeschlossen ist
#define COLOR_PIN 27 // Pin, an dem das Farb-Potentiometer angeschlossen ist
CRGB leds1[NUMPIXELS];
CRGB leds2[NUMPIXELS];
CRGB leds3[NUMPIXELS];
void setup() {
FastLED.addLeds<NEOPIXEL, PIN1>(leds1, NUMPIXELS);
FastLED.addLeds<NEOPIXEL, PIN2>(leds2, NUMPIXELS);
FastLED.addLeds<NEOPIXEL, PIN3>(leds3, NUMPIXELS);
pinMode(POT_PIN, INPUT);
pinMode(NUMFULLYLIT_PIN, INPUT);
pinMode(BRIGHTNESS_PIN, INPUT);
pinMode(COLOR_PIN, INPUT);
}
void loop() {
int potValue = analogRead(POT_PIN);
int delayTime = map(potValue, 0, 4095, 100, 0);
int numFullyLitValue = analogRead(NUMFULLYLIT_PIN);
int numFullyLit = map(numFullyLitValue, 0, 4095, 1, NUMPIXELS/2);
int brightnessValue = analogRead(BRIGHTNESS_PIN);
int brightness = map(brightnessValue, 0, 4095, 0, 255);
FastLED.setBrightness(brightness);
int colorValue = analogRead(COLOR_PIN);
CHSV color = CHSV(map(colorValue, 0, 4095, 0, 255), 255, 255); // Voll gesättigte Farbe
for (int i = 0; i < NUMPIXELS; i++) {
updateLEDs(leds1, i, numFullyLit, color);
updateLEDs(leds2, i, numFullyLit, color);
updateLEDs(leds3, i, numFullyLit, color);
FastLED.show();
delay(delayTime);
}
}
void updateLEDs(CRGB* leds, int position, int numFullyLit, CHSV color) {
for (int i = 0; i < NUMPIXELS; i++) {
int brightness = calculateBrightness(i, position, NUMPIXELS / numFullyLit, numFullyLit);
leds[i] = color;
leds[i].fadeToBlackBy(255 - brightness);
}
}
int calculateBrightness(int ledIndex, int position, int step, int numFullyLit) {
for (int j = 0; j < numFullyLit; j++) {
int fullyLitPosition = (position + j * step) % NUMPIXELS;
if (ledIndex == fullyLitPosition) {
return 255;
}
int nextFullyLitPosition = (fullyLitPosition + step) % NUMPIXELS;
int midPoint = (fullyLitPosition + step / 2) % NUMPIXELS;
if (ledIndex == midPoint) {
return 0;
}
int distance = min(abs(ledIndex - fullyLitPosition), NUMPIXELS - abs(ledIndex - fullyLitPosition));
if (distance < step / 2) {
return map(distance, 0, step / 2, 255, 0);
}
}
return 0;
}
-------------------------------
*/
#include <FastLED.h>
#define PIN1 21 // Pin, an dem der erste LED-Ring angeschlossen ist
#define PIN2 19 // Pin, an dem der zweite LED-Ring angeschlossen ist
#define NUMPIXELS 16 // Anzahl der LEDs in jedem Ring
#define POT_PIN 12 // Pin, an dem das Geschwindigkeits-Potentiometer angeschlossen ist
#define NUMFULLYLIT_PIN 14 // Pin, an dem das NUMFULLYLIT-Potentiometer angeschlossen ist
#define BRIGHTNESS_PIN 34 // Pin, an dem das Helligkeits-Potentiometer angeschlossen ist
#define COLOR_PIN 27 // Pin, an dem das Farb-Potentiometer angeschlossen ist
#define BUTTON_PIN 35 // Pin, an dem der Knopf angeschlossen ist
CRGB leds1[NUMPIXELS];
CRGB leds2[NUMPIXELS];
bool wobbleMode = false;
unsigned long lastButtonPress = 0;
void setup() {
FastLED.addLeds<NEOPIXEL, PIN1>(leds1, NUMPIXELS);
FastLED.addLeds<NEOPIXEL, PIN2>(leds2, NUMPIXELS);
pinMode(POT_PIN, INPUT);
pinMode(NUMFULLYLIT_PIN, INPUT);
pinMode(BRIGHTNESS_PIN, INPUT);
pinMode(COLOR_PIN, INPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
int potValue = analogRead(POT_PIN);
int delayTime = map(potValue, 0, 4095, 100, 0);
int numFullyLitValue = analogRead(NUMFULLYLIT_PIN);
int numFullyLit = map(numFullyLitValue, 0, 4095, 1, NUMPIXELS / 2);
int brightnessValue = analogRead(BRIGHTNESS_PIN);
int brightness = map(brightnessValue, 0, 4095, 0, 255);
FastLED.setBrightness(brightness);
int colorValue = analogRead(COLOR_PIN);
CHSV color = CHSV(map(colorValue, 0, 4095, 0, 255), 255, 255); // Voll gesättigte Farbe
// Knopf-Logik
if (digitalRead(BUTTON_PIN) == LOW) {
if (millis() - lastButtonPress > 200) { // Debounce-Zeit von 200 ms
wobbleMode = !wobbleMode;
lastButtonPress = millis();
}
}
if (wobbleMode) {
applyWobbleEffect(numFullyLit, color);
} else {
applyNormalEffect(numFullyLit, color);
}
FastLED.show();
delay(delayTime);
}
void applyNormalEffect(int numFullyLit, CHSV color) {
for (int i = 0; i < NUMPIXELS; i++) {
updateLEDs(leds1, i, numFullyLit, color);
updateLEDs(leds2, i, numFullyLit, color);
}
}
void applyWobbleEffect(int numFullyLit, CHSV color) {
static int wobblePosition = 0;
static bool wobbleDirection = true;
updateLEDs(leds1, wobblePosition, numFullyLit, color);
updateLEDs(leds2, NUMPIXELS - wobblePosition - 1, numFullyLit, color);
if (wobbleDirection) {
wobblePosition++;
if (wobblePosition >= NUMPIXELS) {
wobblePosition = NUMPIXELS - 1;
wobbleDirection = false;
}
} else {
wobblePosition--;
if (wobblePosition < 0) {
wobblePosition = 0;
wobbleDirection = true;
}
}
}
void updateLEDs(CRGB* leds, int position, int numFullyLit, CHSV color) {
for (int i = 0; i < NUMPIXELS; i++) {
int brightness = calculateBrightness(i, position, NUMPIXELS / numFullyLit, numFullyLit);
leds[i] = color;
leds[i].fadeToBlackBy(255 - brightness);
}
}
int calculateBrightness(int ledIndex, int position, int step, int numFullyLit) {
for (int j = 0; j < numFullyLit; j++) {
int fullyLitPosition = (position + j * step) % NUMPIXELS;
if (ledIndex == fullyLitPosition) {
return 255;
}
int nextFullyLitPosition = (fullyLitPosition + step) % NUMPIXELS;
int midPoint = (fullyLitPosition + step / 2) % NUMPIXELS;
if (ledIndex == midPoint) {
return 0;
}
int distance = min(abs(ledIndex - fullyLitPosition), NUMPIXELS - abs(ledIndex - fullyLitPosition));
if (distance < step / 2) {
return map(distance, 0, step / 2, 255, 0);
}
}
return 0;
}