Hallo,
es geht darum, dass wenn man auf einen Button drückt, dann soll eine LED dreimal blinken.
Wenn man während dem Blinken erneut auf den Button drückt, dann muss die LED wieder 3x blinken.
Das ganze soll ohne blocking Code implementiert werden.
Wie man eine LED ohne blocking Code zum blinken bringt, habe ich bereits gefunden.
Die LED soll aber dreimal blinken. Jetzt könnte man eine Schleife verwenden, damit die LED 3x blinkt, aber dann hätte ich wieder implizit blocking Code drin.
Wie kann man das ohne blocking Code implementieren?
user10198:
wenn man auf einen Button drückt, dann soll eine LED dreimal blinken.
Wenn man während dem Blinken erneut auf den Button drückt, dann muss die LED wieder 3x blinken.
Das ganze soll ohne blocking Code implementiert werden.
Jetzt könnte man eine Schleife verwenden, damit die LED 3x blinkt, aber dann hätte ich wieder implizit blocking Code drin.
Wie kann man das ohne blocking Code implementieren?
also mal grundsätzlich: Die Aufgabenstellung ist schon ungenau.
Du möchtest was? Retriggerbar oder aufzählend?
user10198:
es geht darum, dass wenn man auf einen Button drückt, dann soll eine LED dreimal blinken.
Wenn man während dem Blinken erneut auf den Button drückt, dann muss die LED wieder 3x blinken.
Das ganze soll ohne blocking Code implementiert werden.
BlinkWithoutDelay ist schon der richtige Ansatz.
Am Anfang der Loop() Taster abfragen, wenn Taster gedrückt eine Zählvariable auf 3 setzen.
Immer wenn die Zeit abgelaufen ist und die LED aus ist, wird sie eingeschaltet und danach muß die Zählvariable um eins verringert werden. Die Abfrage ob die ledState LOW ist, noch mit einer Abfrage Zählvariable > 0 ergänzen.
Sollte funktionieren und blockiert nicht. Die Loop rennt immer komplett durch.
Allerdings:
Wenn die LED bereits an ist und man drückt, leuchtet sie danach nochmals 3 mal. So gewollt?
user10198:
Wenn man während dem Blinken erneut auf den Button drückt, dann muss die LED wieder 3x blinken.
Da ist dann aber nicht klar ob die gerade leuchtende LED mitgezählt wird und danach nur noch 2 mal blinken soll, oder danach noch 3 mal.
Wenn die LED aus ist, blinkt sie nur noch 3 mal.
Holla, leichter Fehler. Zähler muß mit 2 geladen werden... Gerade kurz zusammengestrickt und getestet. Mein Kochrezept blinkte 4 mal
Stimmt doch, hatte einen Wackelkontakt am Taster...
Katsumi_S:
Nachtriggern ist schon klar. Soll ja auch so.
nene...
"Wenn man während dem Blinken erneut auf den Button drückt, dann muss die LED wieder 3x blinken."
a) nachdem die aktuelle Routine abgelaufen ist (aufaddieren)
b) aktuelle Routine beenden und von vorn anfangen (retirggern)
Da ist dann aber nicht klar ob die gerade leuchtende LED mitgezählt wird und danach nur noch 2 mal blinken soll, oder danach noch 3 mal.
Konsequent wäre IMHO:
Tastendruck beim retriigern (und nur dort) löscht das HIGH der LED[edit] und startet LowTime[/edit] und setzt den Zähler zurück.
Gezählt wird mit der steigenden Flanke.
Darum das mit dem Hinweis, das der TO noch mal nachlegen muss um das genauer zu spezifieren...
Man könnte das retrigger-"Problem", wenn gedrückt wird während der Sketch grade in einer EIN-Phase des aktuellen Blinkzyklus ist, so lösen, dass die LED in jedem Fall AUS ist, während und solange der Taster gedrückt ist, und die erste EIN-Phase mit dem Loslassen des Tasters startet.