Drehregler LED-Strip Lämpchenanzahl/Dimmer

Hallo liebe Arduino-Community,
ich bin ein kompletter Anfänger und versuche mich gerade in das gesamte Thema einzuarbeiten :slight_smile:
Für ein privates Projekt müsste ich ein Programm schreiben, welches mit zwei Drehreglern ein LED-Strip ansteuert, sodass man zum einen die Lämpchenanzahl verändert und zum anderen den gesamten LED-Strip dimmen kann.
Online finde ich da leider nichts konkret, könnt ihr mir da weiterhelfen?

LG

Drehencoder oder Poti?

Habe ehrlich gesagt den Unterschied noch nicht ganz verstanden, aber was ich sagen kann ist, dass sich die Regler nicht ins unendliche drehen müssen.

Dann Poti. Irgendwas mit 2K bis 10K.
Ein Pin an 5v ein Pin an Gnd und den Schleifer an einen AnalogIn.

5V ----+
       |
      | |
A0 -->| | 5Kohm
      | |
       |
GND----+

Auf dem AnalogIn liest Du dann mit AnalogRead() ein - 0 ist 0 und 1023 ist Dein Maximalwert.
Wenn Du die Helligkeit dimmen willst, mach das das entweder mit map oder rechne den analogRead()-Wert / 4

Für Deinen Stripe hast Du vermutlich einen Anfangspunkt und willst von dem nacheinander weiter zuschalten.
Dann musst die Menger der Pixel auf den AnalogWert umrechen.

Fertig :wink:

Getestet mit zwei Potentiometern, WS2815 und ESP32, weshalb für einen UNO Anpassungen notwendig wären:

#include "FastLED.h"

const uint8_t pinAnzahl = 34;              // für UNO anpassen
const uint8_t pinHelligkeit = 35;          // für UNO anpassen
const uint16_t MAXWERT_ADWANDLER = 4096;   // für UNO anpassen

const uint16_t NUM_PIXEL = 50;
CRGB leds[NUM_PIXEL];

#define LED_TYPE   WS2812
#define COLOR_ORDER   GRB
#define DATA_PIN       12

void setup()
{
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_PIXEL);
}

void loop() {
  uint32_t jetzt = millis();
  static uint32_t vorhin = 0;
  const uint32_t INTERVALL = 100;

  if (jetzt - vorhin >= INTERVALL) {
    vorhin = jetzt;
    uint16_t aktivLed = NUM_PIXEL * analogRead(pinAnzahl) / MAXWERT_ADWANDLER;
    for (uint16_t pix = 0; pix < aktivLed; pix++) {
      leds[pix] = CRGB::White;
    }
    for (uint16_t pix = aktivLed; pix < NUM_PIXEL; pix++) {
      leds[pix] = CRGB::Black;
    }
    uint8_t helligkeit = 255 * analogRead(pinHelligkeit) / MAXWERT_ADWANDLER;
    FastLED.setBrightness(helligkeit);
    FastLED.show();
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.