Fade LEDs durch Knopf drücken

Ich habe einige Foreneinträge und Tutorials im Web gefunden, um LEDs per Knopfdruck auf an zu faden. Aber das war eigentlich nur, solange der Button gedrückt wurde.

Ich würde das aber gerne so haben, dass die LEDs von aus (0%) zu an (100%) innerhalb von x Sekunden faden, sobald man den Button gedrückt hat (wobei es dabei egal ist, ob man ihn gedrückt hält oder nur kurz drückt). Und das gleiche dann umgekehrt, sobald man den Button wieder drückt. Und wenn die Stromzufuhr ausfällt und man es dann wieder anschließt, sollen sie wieder bei 0% starten, bis man den Button drückt.

Ist das soweit möglich?

ja, das ist möglich Grüße uwe

Ja möglich, jedoch solltest du dich grundlegend erst einmal mit den Basics in Arduino sowie der Elektronik beschäftigen. Resultierend aus deiner anderen Frage sehe ich derzeit nicht, dass du dazu in der Lage wärst.

Hallo,

wenn du das schon gefunden hast, dann nimm das doch als Basis und ändere den Zustand Taster zum Schalter ab.

MarcoCol: ... sobald man den Button gedrückt hat (wobei es dabei egal ist, ob man ihn gedrückt hält oder nur kurz drückt).

Du möchtest die positive oder negative Flanke des Buttons auswerten. Das geht grundsätzlich so:

if (!altButtom && aktButton) {} // positive Flanke if (altButtom && !aktButton) {} // negative Flanke

Wenn Du nach "Arduino Flankensteuerung" suchst, triffst Du überwiegend auf Interruptauswertung, das brauchst Du nicht. Hier kannst Du spicken: Mehrere Motoren unabhängig steuern.

Danke sschultewolter für die Info und die Einschätzung...

Danke den anderen für die Antworten. Ich habe mich bereits aktiv damit beschäftigt, Bin aber in ersten Versuchen gescheitert und habe mich dann gefragt, ob es logisch überhaupt möglich ist...

Ist es. Du mußt Dir nur überlegen, was passieren soll, wenn während des Fadens der Knopf gedrückt wird.

Hallo,

fang doch erstmal klein an. Schalte eine LED mit jeden neuen Tastendruck ein bzw. aus. Wenn du das hast, startest du darauf hin das Fading statt dem ein/aus. Oder kannst daraufhin die bekannten Bsp. nutzen.

Wenn der Knopf während des Fades gedrückt wird, dann sollte das praktisch ignoriert werden, bis das Faden abgeschlossen ist, egal in welche Richtung.
Das müsste man doch eigentlich so abfangen können, oder?
Wenn Helligkeit >=1 || <=255 & der Button wird gedrückt, dann passiert nichts
Wenn Helligkeit ==0 & der Button wird gedrückt, dann faden auf 256
Wenn Helligkeit ==256 & der Button wird gedrückt, dann faden auf 0

Bin noch nicht so firm im Coden, aber wird schon kommen.

analogWrite erwartet einen byte-Wert also 0-255 damit kannst du nicht bis 256 gehen, das ist dann schon wieder 0

Das müsste man doch eigentlich so abfangen können, oder?
Wenn Helligkeit >=1 || =<255 & der Button wird gedrückt, dann passiert nichts
Wenn Helligkeit ==0 & der Button wird gedrückt, dann faden auf 256
Wenn Helligkeit ==256 & der Button wird gedrückt, dann faden auf 0

abgeändert:
Das müsste man doch eigentlich so abfangen können, oder?
Wenn Helligkeit >=1 || <255 & der Button wird gedrückt, dann passiert nichts
Wenn Helligkeit ==0 & der Button wird gedrückt, dann faden auf 256
Wenn Helligkeit ==255 & der Button wird gedrückt, dann faden auf 0

Danke :)

Dann freut es mich ja erstmal, dass ich vom Gedanken bereits auf dem richtigen Weg zu sein scheine. Aber wenn 256 nicht geht (bzw. es zu hoch ist), dann müsste es doch in der zweiten Zeile auf 255 faden, nicht auf 256, oder? Nun muss ich das "nur noch" in den Code packen...

Hallo,

ich mach das anders. Gibt viele Möglichkeiten. Ich nutze Statusvariablen. Beim Fadingaufruf wird diese geändert und der Fadingeintritt entsprechend mit dieser Bedingung abgefragt. Die Fadingfunktion setzt diesen Status am Ende wieder zurück. Erst dann kann erneut auf den Button reagiert werden. Praktisch eine UND Verknüpfung. Ggf wird die logische Gültigkeitsverknüpfung sehr lang. Damit wird ein Taster/Schalterprellen automatisch aussortiert.

so nach dem Motto. Dann folgen entsprechend andere Aktionen. Willste dich selbst durchbeißen?

if ( (digitalRead(Taster)==LOW) && (Dimming_aktiv==false) && (Status_FadeIN==false) )  {
    Dimming_aktiv = true;
    Status_FadeIN = true;
  }

MarcoCol:
Aber wenn 256 nicht geht (bzw. es zu hoch ist), dann müsste es doch in der zweiten Zeile auf 255 faden, nicht auf 256, oder?

Wenn Helligkeit >=1 || =<256 & der Button wird gedrückt, dann passiert nichts

Wenn Helligkeit >=1 || <256 & der Button wird gedrückt, dann passiert nichts

ardubu hat das Gleichheitszeichen vergessen, das macht den Unterschied.

MarcoCol:
Bin noch nicht so firm im Coden, aber wird schon kommen.

Das bekommst Du selbst hin, oder? Wenn nicht, dann fragen.

Doc_Arduino:
ich mach das anders. Gibt viele Möglichkeiten.

Ich bevorzuge endliche Automaten. Funktioniert wie ein Umschalter, klack, klack, klack :slight_smile:

Man kann auch auf 256 abfragen. Man muss nur die Zähl-Variable als int deklarieren. Nicht als byte.

Übergeben kannst du an analogWrite() natürlich nur 255. Aber sowas geht:

if (fade == 256)
  fade = 0;

Danke für die Möglichkeiten. Also die LED an und auszuschalten klappt schon mal. Das mit dem Faden noch nicht, aber da werde ich versuchen mich morgen durchzubeißen.

Ich gehe mal davon aus, das Fading-Beispiel aus der IDE kennst Du?

Mit der SoftPWM Libary geht das sehr gut.

Soweit habe ich es geschafft. Was mich wundert: Wenn die LED eigentlich auf 0 stehen sollte, dann ist sie manchmal - nicht immer, aber selten - ganz leicht an und flackert minimal. Woran kann das liegen?