"Bobbycar LED" - 2 Fragen (Mehrere Taster: Unterprog. Abbrechen / Einfacher "Code" ?)
|
05.03.2020, 18:44
(Dieser Beitrag wurde zuletzt bearbeitet: 10.03.2020 22:40 von Bitklopfer.)
Beitrag #1
|
|||
|
|||
![]()
Guten Abend Zusammen,
es handelt sich insgesamt um mein zweites Projekt. Also bitte nicht direkt empört reagieren wenn der Code an der ein oder anderen stelle "einfach" ist und das der Profi vermutlich einfacher gelöst hätte. Vielleicht sollte ich auch noch dazu sagen, dass das ganze auf einem ESP32 läuft und erstmal "nur" auf ein Holzbrett geschraubt ist. Soweit läuft auch alles, ich hätte bis hier her mit wesentlich mehr Problemen gerechnet. Wenn die Software vom Grundaufbau her auch läuft, werde ich danach erst an die Programmierung der einzelnen Lichtszenen gehen, unter anderem ist geplant aus 2 Strips 4 zu machen (für jede Ecke einen), aber das dürfte ja eher nicht das Problem sein. Genrell habe ich 2 Fragen zu meinem Code: - Im Moment ist es ja so, dass nach Tastendruck das Unterprogramm erst mal durchläuft. Kann man das irgendwie so anpassen (wenn ja wie) dass man Beispielsweise aus dem Warnblick-Programm in den Blinkmodus kommt ohne warten zu müssen das das Programm beendet ist ? - Vermutlich kann man das ein oder andere vereinfachen, wenn jemand Tipps dazu hat, wäre ich für den ein oder anderen Hinweis dankbar ![]() Und hier der Code: Code: #include "ClickButton.h" |
|||
05.03.2020, 21:17
(Dieser Beitrag wurde zuletzt bearbeitet: 05.03.2020 21:24 von Tommy56.)
Beitrag #2
|
|||
|
|||
RE: "Bobbycar LED" - 2 Fragen
Das geht nur, wenn Du nichtblockierend programmierst.
Schaue Dir in der IDE das Beispiel BlinkWithoutDelay an und verstehe es. Dabei kann Dir die Nachtwächtererklärung helfen oder das Tutorial von Rentner oder die Erklärung von Arne oder das Beispiel von Franz. Gruß Tommy Edit: Du kannst Dir natürlich auch den objektorientierten Code anschauen, den ich hier in #28 veröffentlicht habe. "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
06.03.2020, 13:27
Beitrag #3
|
|||
|
|||
RE: "Bobbycar LED" - 2 Fragen
Das heißt ich bleibe bei meinen Unterprogrammen / Funktionen, ändere diese einfach von "delay" in "millis" und schon kann ich in der Hauptschleife (loop) von Funktion zu Funktion springen auch wenn diese noch nicht vollständig durchgelaufen sind ?
|
|||
06.03.2020, 16:13
Beitrag #4
|
|||
|
|||
RE: "Bobbycar LED" - 2 Fragen
(06.03.2020 13:27)KlausGuenther schrieb: Das heißt ich bleibe bei meinen Unterprogrammen / Funktionen, ändere diese einfach von "delay" in "millis" und schon kann ich in der Hauptschleife (loop) von Funktion zu Funktion springen auch wenn diese noch nicht vollständig durchgelaufen sind ? Wenn es dann so einfach wäre. Millis() ist eine Funktion die du nicht einfach statt der Funktion "delay()" verwenden kannst. Sieh dir dazu das schon genannte Beispiel BlinkWithoutDelay an, da siehst du, wie millis verwendet wird. Gruß Dieter I2C = weniger ist mehr: weniger Kabel, mehr Probleme. ![]() |
|||
06.03.2020, 18:51
Beitrag #5
|
|||
|
|||
RE: "Bobbycar LED" - 2 Fragen
(06.03.2020 16:13)hotsystems schrieb: Millis() ist eine Funktion die du nicht einfach statt der Funktion "delay()" verwenden kannst. Sieh dir dazu das schon genannte Beispiel BlinkWithoutDelay an, da siehst du, wie millis verwendet wird. Habe ich. Soweit habe ich das auch verstanden und finde ja ganz in Ordnung das der Nachtwächter auf Rundgeht geht uns ausser gucken nix zu tun hat. Ich wollte nur sicher sein, dass ich mir jetzt nicht mit viel Mühe etwas anlese, ausprobiere, alles umprogrammiere und dann feststelle, dass ich dann trotzdem nicht von einem "Unterprogramm"/Funktion in die andere komme ohne warten zu müssen das die erst mal zu ende läuft. Anhand eine Beispiels von Adafruit habe ich jetzt die Unterfunktion auch noch mit leben gefüllt und auch da komme ich trotz eines "delay(3) nicht raus. |
|||
06.03.2020, 22:41
Beitrag #6
|
|||
|
|||
RE: "Bobbycar LED" - 2 Fragen
(06.03.2020 18:51)KlausGuenther schrieb: Ich wollte nur sicher sein, dass ich mir jetzt nicht mit viel Mühe etwas anlese, ausprobiere, alles umprogrammiere und dann feststelle, dass ich dann trotzdem nicht von einem "Unterprogramm"/Funktion in die andere komme ohne warten zu müssen Unterfunktionen gibt es nicht. Ich vermute du meinst die reinen Funktionen. Was du damit meinst, das du nicht mehr aus de Funktion rauskommst, verstehe ich nicht. Das geht normal immer am Ende der Funktion. Vorrausgesetzt, alles ist richtig programmiert. Gruß Dieter I2C = weniger ist mehr: weniger Kabel, mehr Probleme. ![]() |
|||
07.03.2020, 09:44
Beitrag #7
|
|||
|
|||
RE: "Bobbycar LED" - 2 Fragen
Also die Funktionen beenden und gehen dann die die Loop Funktion zurück. Soweit alles gut.
Nur jetzt wäre ja Denkbar, z.B. die Funktion für das Warnblinken sehr sehr lange zu machen und aber die Möglichkeit zu haben, dann durch einen Tastendruck in eine andere Funktion zu wechseln. Und daran hapert es im Moment. Also im Prinzip dem Nachtwächter auf seiner Runde sagen: schön das Du immer bei Lampe A vorbei gehst, jetzt machen wir Lampe C. |
|||
07.03.2020, 10:34
Beitrag #8
|
|||
|
|||
RE: "Bobbycar LED" - 2 Fragen
(07.03.2020 09:44)KlausGuenther schrieb: Also die Funktionen beenden und gehen dann die die Loop Funktion zurück. Soweit alles gut. Nicht zwangsläufig. Die Funktion geht immer dahin zurück, wo sie gestartet wurde. Zitat:Nur jetzt wäre ja Denkbar, z.B. die Funktion für das Warnblinken sehr sehr lange zu machen und aber die Möglichkeit zu haben, dann durch einen Tastendruck in eine andere Funktion zu wechseln. Und daran hapert es im Moment. Also im Prinzip dem Nachtwächter auf seiner Runde sagen: schön das Du immer bei Lampe A vorbei gehst, jetzt machen wir Lampe C. Auch das kann funktionieren. Nur dazu darf keine Funktion blockierend geschrieben sein und du musst immer (möglichst in der loop) die Tasten abfragen können. Ob das mit den verwendeten Libraries tatsächlich so umsetzbar ist, kann ich allerdings nicht sagen. Ich habe die bisher noch nicht verwendet. Gruß Dieter I2C = weniger ist mehr: weniger Kabel, mehr Probleme. ![]() |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste