Leds nacheinander einfaden

Hallo zusammen :wink:

Ich würde gerne mehrere 12 Volt Leds nacheinander mit Fadeeffekt einschalten. Hier im Forum und auch bei unserem Freund Google ??? habe ich leider nichts für mich brauchbares gefunden.

Ich denke das so etwas zu den leichteren Aufgaben für euch gehört und ich würde mich sehr über Hilfe freuen.
Evtl. gibt es ja eine Lib die genau sowas macht.
Zu meiner Schande muss ich gestehen das ich es mit dem selber programmieren nicht so wirklich habe sorry :-[ :-[ irgendwie ist das wohl nix für son Handwerker >:(

Wie wäre es mit PWM Led Fade IN / Fade OUT als Einstieg?

Detsimbo:
... und leider war mir nicht bewusst das ich hier programmieren können sollte.

Ich darf daran erinnern: Ja, solltest Du!

Oder zumindest den Willen zeigen, es zu lernen. Bei Fehlern helfen wir.

Um welche 12V-LED geht es denn? Bitte einen Link dazu.

Gruß Tommy

Okay okay... ich gebs auf.. um ehrlich zu sein ich habe nicht wirklich Interesse daran hier noch Informatiker zu werden.. sorry wenn ich eure kostbare zeit verschwende!

Dann halt nicht. Das ist allein Deine Entscheidung.

Gruß Tommy

Das hat wenig mit wollen zutun.

Detsimbo:
Okay okay... ich gebs auf.. um ehrlich zu sein ich habe nicht wirklich Interesse daran hier noch Informatiker zu werden.. sorry wenn ich eure kostbare zeit verschwende!

Wie kommst du darauf, dass du ein Informatiker bist, wenn du drei Anweisungen in richtiger Reihenfolge zusammen schreiben kannst.
Auch wenn viele hier ihre Sketche funktionsfähig zusammen setzen können, sind sie noch lange keine Informatiker.
Dennoch können die stolz auf sich sein.

Detsimbo:
Das hat wenig mit wollen zutun.

Dann ist es wohl besser, wenn Du Dir etwas Fertiges kaufst oder einen Dienstleister bezahlst, der es nach Deinen Wünschen baut.

Ich habe schon viele Leute aus Berufen, die nichts mit IT und Elektronik zu tun hatten erlebt, die sich rein gekniet haben, weil sie es begreifen wollten und die sehr gute Ergebnisse erzielt haben.

Wie schrieb hier mal jemand sinngemäß: "Wer will findet Lösungen, wer nicht will Gründe."

So betrachte ich auch Deine ablehnende Haltung.

Gruß Tommy

Eigentlich ist es doch eine simple Aufgabe.

Man setzt erstmal für jede LED die Fading Funktion. Ich mache sowas wie fiolgt.

Ich schreibe erst eine Funktion, die die aktuelle Helligkeit mit der Soll-Helligkeit vergleicht und sich bei Unterschieden in einzelnen Schritten annähert. Die Schritte werden zeitlich in ihrem Abstand über millis() gesteuert.

Ist der Schritt erledigt hat man schon mal die Funktion, das die LED(s) einer Ziel-Helligkeit sanft folgen.

Nun bringt man eine Funktion rein, die zu bestimmten Ereignissen (Taster, Fernbedienung, zeitlicher Ablauf) die Zielhelligkeit auf einen gewünschten Wert vorgibt.

Detsimbo:
Evtl. gibt es ja eine Lib die genau sowas macht.

Ja, die gibt es, und Du kennst sie auch.
Aber ein minimal kleines Progrämmchen drumherumstricken müsstest Du schon selbst. Mit der Lib ist das auch nicht komplizierter als einfach nacheinander ein/ausschalten.

Hallo...

Ich bin Detsimbo, komischwerweise kann ich mich mit dem Nick nicht mehr anmelden, vielleicht könnte sich da der Admin drum kümmern?

Also sorry für meine etwas ablehnende Haltung und ich versuche mich mal zu erklären :wink:

Kurzum... Es ist einfach so das ich mich mit dem Thema Arduino viel zu wenig beschäftige bzw. auch nicht die Zeit dazu habe und dachte das die Profis hier bestimmt schnell helfen :wink:

Zum eigentlichen Thema... ich habe da etwas gebastelt was auch irgendwie funktioniert aber ob es richtig ist, k.A.

// 3 Leds einfaden

int ledPin1 = 3 ;
int ledPin2 = 5 ;
int ledPin3 = 6 ;


void setup()

{

}

void loop() {


  for (int helligkeit = 1; helligkeit <= 255; helligkeit = helligkeit + 1) {

    analogWrite(ledPin1 , helligkeit);

    delay(5);

  }


  for (int helligkeit = 1; helligkeit <= 255; helligkeit = helligkeit + 1) {

    analogWrite(ledPin2 , helligkeit);

    delay(5);

  }

  for (int helligkeit = 1; helligkeit <= 255; helligkeit = helligkeit + 1) {

    analogWrite(ledPin3 , helligkeit);


    delay(5);

  }

  while (1);

}

Hi

Wenn die LEDs nacheinander hochdimmen sollen - Das macht der Code.
Wenn Das Alles ist, was Du hiermit erreichen wolltest: Glückwunsch, Du bist hiermit fertig :slight_smile:

Es gibt keinen Cent für unbenutzte Ressourcen zurück - wenn das Programm in den Chip passt und Das tut, was Es soll, sind wir fertig.
Egal, ob man was optimieren könnte - an der 100% erfüllten Funktion ändert sich ja Nichts mehr und, wie bereits geschrieben, fallen unten auch keine Münzen wegen der nicht benutzten Ressourcen heraus.

Wenn's irgendwo anders sein sollte - man könnte ja noch Mal drüber schauen und erörtern, wo man was anpassen muß, damit die gewünschte Funktionalität zum Vorschein kommt.

MfG

PS: Gibt's hier kein 'Passwort vergessen' Funktion?

Super... vielen dank :wink:
was evtl. noch schön wäre, wenn die lichter nach einer bestimmten zeit dann wieder ausfaden, meinetwegen 20 Sekunden. Dazu habe ich leider nichts gefunden oder muss ich einfach den code "umkehren" ?

vielleicht ein anstatt while (1) ein delay (20) und dann etwas so

for (int helligkeit = 1; helligkeit <= 0; helligkeit = helligkeit - 1) {

    analogWrite(ledPin2 , helligkeit);

    delay(5);

passwort vergessen geht schon aber ich habe leider keine email bekommen....

Fast. Nur den Anfangswert der For-Schleife solltest Du etwas höher nehmen.

Gruß Tommy

for (int helligkeit = 1; helligkeit <= 0; helligkeit = helligkeit - 1) {

analogWrite(ledPin2 , helligkeit);

delay(5);

die rot markierte ziffer höher oder was genau ist der anfangswert?

Ja und mal ein paar Grundlagen anschauen (z.B. for-Schleife).

Gruß Tommy

statt der 1 ne 255, sonst fadet es nur von 1 auf 0 und fertig, also quasi nix.
delay(20) bewirkt übrigens eine Pause von 20 Millisekunden...

Sooo... ich habs dann tatsächlich hinbekommen, zumindest macht der Sketch genau das was ich möchte... Nun noch eine Frage dazu... könnte man das ganze nicht optimieren? Zusammenfassen? Kürzer schreiben... wie auch immer...

Und Danke für die Hilfe.
Grundlagen für Schleifen habe ich mir angeschaut :wink:

hier mein Sketch

3leds_ein/aus_faden_mit_Pause

// 3 Leds ein/aus faden mit Pause

int led3 = 3;
int led5 = 5;
int led6 = 6;

void setup() {

}

void loop() {

  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 1) {
    analogWrite(led3, fadeValue);
    delay(15);
  }
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 1) {
    analogWrite(led5, fadeValue);
    delay(15);
  }
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 1) {
    analogWrite(led6, fadeValue);
    delay(15);

  }{
    delay (10000);
  }
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 1) {
    analogWrite(led6, fadeValue);
    delay(25);
  }
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 1) {
    analogWrite(led5, fadeValue);
    delay(25);
  }
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 1) {
    analogWrite(led3, fadeValue);
    delay(25);
  }
  while (1);
}

Hi

Damit faden die drei LEDs nacheinander hoch, warten 10 Sekunden und faden wieder runter.
Danach passiert Nichts, bis der Akku neu angestöpselt wird - Strom wird hier aber Nicht gespart, da der µC immer noch eine Endlosschleife abarbeitet - zwar immer nur einen Sprungbefehl, auf die Stelle, auf Der Er gerade eh ist, aber dafür recht schnell.

Wobei wir im nicht Batterie betriebenem Bereich auch damit leben können.

Glückwunsch zur Erfolgreichen Erweiterung Deines Sketch und Danke für das Feedback!

MfG

DeSiMiWuLa:
... könnte man das ganze nicht optimieren? Zusammenfassen? Kürzer schreiben... wie auch immer...

Konstante Werte solltest Du in Konstanten ablegen.

Wenn Dein Programm noch andere Dinge tun können soll, hier eine Anregung dazu mit wenig blockierendem Code:

const byte leds[] = {3, 5, 6, 6, 6, 5, 3, 3};

void setup() {

}

void loop() {
  anzeige();
}

void anzeige() {
  static byte led;
  static uint16_t zeit;
  static uint32_t aktMillis, altMillis;
  static int fadeValue;
  aktMillis = millis();
  if (aktMillis - altMillis >= zeit)
  {
    altMillis = aktMillis;
    switch (led)
    {
      case 0:
      case 1:
      case 2:
        fadeValue++;
        analogWrite(leds[led], fadeValue);
        if (fadeValue == 255)
        {
          led++;
          fadeValue = 0;
        }
        zeit = 15;
        break;
      case 3:
        led++;
        fadeValue = 255;
        zeit = 3000;
        break;
      case 4:
      case 5:
      case 6:
        fadeValue--;
        analogWrite(leds[led], fadeValue);
        if (fadeValue == 0)
        {
          digitalWrite(leds[led], LOW);
          led++;
          fadeValue = 255;
        }
        zeit = 15;
        break;
      case 7:
        break;
    }
  }
}