Guten Tag zusammen, ich habe folgenden Sketch: Ich möchte erreichen, dass die if bzw. else Schleife bei betätigen des Tasters nur einmal durchläuft und dann bei jeweils grün = HIGH oder rot = HIGH bleibt.
Wie kann ich das erreiche beziehungsweise welcher Code ist dafür nötig.
Du benutzt eine Statusvariable. In der if Bedingung der "Schleife" kontrollierst Du ob die Statusvariable zB 0 ist. in der "Schleife" setzt Du die Statusvariable auf 1. Wenn die "Schleife" wieder ausgeführt werden soll setzt Du die Statusvariable wieder auf 0.
Grüße Uwe
Wie kann ich das erreiche beziehungsweise welcher Code ist dafür nötig.
Erreichen kannst du das in dem du das so programmierst.
Und welcher Code dafür nötig ist?
Natürlich einer, der das tut, was du willst.
Sicherlich Dutzende Möglichkeiten es gibt.
Leider habe ich dein Problem nicht verstanden...
Der Lauf soll nur einmal nach dem Einschalten stattfinden?
Warum steht er dann in loop() und nicht in setup()
Oder soll es bei jedem Betätigen durchlaufen werden?
Dann wirst du Betätigungen erkennen müssen.
Ablaufsteuerung
Meine Standardantwort zu Ablaufsteuerungen:
Eine Stichworte Sammlung für Google Suchen:
Endlicher Automat,
ProtoThreads,
State Machine,
Multitasking,
Coroutinen,
Ablaufsteuerung,
Schrittkette,
BlinkWithoutDelay,
Damit dein Beispiel überhaupt richtig und sicher funktioniert, solltest du dich komplett von den delays verabschieden.
Ersetze die delays durch Funktionen mit millis (Beispiel BlinkWithoutDelay) und berücksichtige die schon gemachten Vorschläge.
pronicolas:
Guten Tag zusammen, ich habe folgenden Sketch: Ich möchte erreichen, dass die if bzw. else Schleife bei betätigen des Tasters nur einmal durchläuft und dann bei jeweils grün = HIGH oder rot = HIGH bleibt.
Wie kann ich das erreiche beziehungsweise welcher Code ist dafür nötig.
Ich komme mit combis Infos nicht so ganz weiter, ich kann es alt genauer formulieren: Wenn der Taster gedrückt wird soll erst die grüne led angehen dann wieder aus, dann die gelbe wieder aus und schlussendlich die rote, die dann auch rot bleiben soll. Wenn der taster nicht gedrückt wird, soll es genau umgelehrt passieren d.h rot aus, gelbe an/aus , grün an und grün an bleiben,
Ich komme mit combis infos nicht so ganz weiter, wenn mir jemand sagen könnte nach was ich ich suchen muss um den Befehl richtig auszuführen, dann wäre ich schon sehr dankbar.
Es geht mir weniger um das delay bzw. die zeitenabfolge.
pronicolas:
Ich komme mit combis Infos nicht so ganz weiter,
Naja - eigentlich nicht schwer.
if/else ist KEINE Schleife.
IF ist eine Bedingung.
ELSE wird ausgeführt, wenn genau diese Bedingung NICHT erfüllt ist.
Und dann zu Deiner Vorgabe....
Mit dem Start deines Ardu UND die Taste nicht gedrückt, bekommst Du den Zustand
Wenn der taster nicht gedrückt wird, soll es genau umgelehrt passieren d.h rot aus, gelbe an/aus , grün an und grün an bleiben,
umgehend.
Es wird der Zustand
Wenn der Taster gedrückt wird soll erst die grüne led angehen dann wieder aus, dann die gelbe wieder aus und schlussendlich die rote, die dann auch rot bleiben soll.
nur erreicht, wenn die Taste mehr oder weniger schon beim Anlegen der Betriebsspannung gedrückt ist.
Warum schreibst Du nicht einfach, WAS Es werden soll?
... eine Ampel, Die auf Knopfdruck (und gedrückt halten) die Fahrzeug-Ampel auf ROT schaltet.
... Die bei NICHT-Knopfdruck zurück nach GRÜN schalten soll.
Wäre Das ungefähr, Was Du vorhast?
Dann überlegen wir uns, welche Ampel-Phasen wir haben
ROT
ROT,GELB
GRÜN
GELB
... wieder von Vorne
Wenn Knopf gedrückt ist (und die Wartezeit um ist) und noch nicht ROT, dann gehe einen Schritt weiter.
Wenn Knopf NICHT gedrückt ist (und die Wartezeit um ist) und noch nicht GRÜN, dann gehe einen Schritt weiter
Wenn Schritt >GELB, dann Schritt=ROT
Alles keine größere Hexerei - Du musst Dir NUR den Ablauf klar machen - und Diesen dann programmieren.
Im eigentlichen Sketch sieht man, dass man hier nichts sieht. Das ist elegant, es zwingt zum genauer hinschauen.
Das mit dem const bool stromausfall; ist übrigens nur Spaß
Den sketch habe ich soweit verstanden und dieser funktioniert auch, jetzt muss ich es nur noch schaffen diesen auf weitere Ampel zu übertragen. Besten Dank an Combie und alle anderen.
Den sketch habe ich soweit verstanden und dieser funktioniert auch,
Meinen?
Du, verstanden?
Glückwunsch!
Das ist das ein Hauptgewinn! (auch für mich)
jetzt muss ich es nur noch schaffen diesen auf weitere Ampel zu übertragen.
Ja, die Salami!
In möglichst dünne Scheiben schneiden.
Dann wird das Aroma am intensivsten und man kann am meisten aus einem solchen Thread herausholen.
Oder ohne jede Ironie:
Wäre das vorher ans Licht gekommen, hätte ich evtl eine skalierbare Variante hier gepostet.