Ich bin absoluter Anfänger wenn es um Programmierung geht. Ich habe auch versucht mit Google nach meiner Frage zu suchen wusste aber nicht wonach ich genau suchen muss um meine Frage zu beantworten. Vermutlich ist meine Frage für die meisten hier absolutes Basiswissen.
Frage:
Ich habe u.a. eine Tür welche mit einem Endlagenschalter geprüft wird ob sie offen (Signal HIGH) oder geschlossen (Signal LOW) ist. Und ich habe einen Starttaster den ich mit INPUT_PULLUP abfrage. Nun soll es so sein das ich will das der Starttaster nur dann auslöst wenn die Tür geschlossen ist. Aber er darf nicht auslösen wenn man den Starttaster betätigt und dann die Tür schließt. Außerdem soll man den Starttaster noch 2 Sekunden gedrückt halten bevor das eigentliche Programm startet.
Mit einer einfachen if Auswertung ist es ja nicht getan, da ja dann der Starttaster auch auslöst wenn er erst gedrückt wird und dann die Tür geschlossen wird.
Kann mir jemand sagen wie ich das umsetzen kann?
Hardware:
Ich benutze ein Arduino Mega
Starttaster ist an A0
Endlagenschalter der Tür ist auf D8
Außerdem habe ich 2x 7-Segmentanzeigen mit je 5 Anzeigen verbaut die mir zwei Zeiten anzeigen (habe ich schon zum laufen bekommen dank eines sehr guten Videotutorials).
doch eigentlich schon. Aber mit einer State Machine wird es klarer. Außerdem verirrst du dich nicht in If else Verschachtelungen und ist leichter erweiterbar.
du beschreibst 3 Zustände:
dabei gibts von jedem Zustand bestimmte Übergangsmöglichkeiten in einen anderen Zustand.
Ist die Darstellung korrekt?
wenn ja - poste ein Grundgerüst für deinen Sketch mit allen Pin Definitionen und dem Setup.
dann kann man dir weiterhelfen.
wenn nicht: korrigiere das Bild oder deine Aussagen.
Vielen dank für das Bild. Ich habe nämlich bis dahin nicht gewusst was paulpaulson mit dem EVA Prinzip und Programmablaufplan von mir wollte (Auch nach dem ich mir den Wiki Eintrag angesehen hatte)
Ja wenn ich das richtig verstanden habe ist das Bild korrekt.
Wichtig ist mir das wenn der Starttaster (Port A0) gedrückt wird (wechsel von HIGH zu LOW) bevor die Tür geschlossen wird (Port D8 auf HIGH ist) das Folgeprogramm nicht startet. Nur wenn die Tür geschlossen ist (Port D8 auf LOW ist) soll das Folgeprogramm starten wenn der Taster 2 Sekunden gedrückt wird (Port A0 von HIGH zu LOW wechselt).
Das Folgeprogramm darf auf keinen fall starten wenn der Starttaster (A0) gedrückt gehalten wird und dann die Tür geschlossen wird.
Ich bin noch nicht zuhause weshalb ich grad nicht mehr Posten kann.
Mir ist klar das meine Frage vermutlich für die meisten hier zum Grundlagenwissen gehört. Ich bin aber noch ganz am Anfang was das Programmieren angeht. So habe ich 2 Abende damit zugebracht in dem Programm welches ich aus einem Videotutorial habe einen Fehler zu finden der mit dem Multiplexing meiner 7-Segmentanzeigen zu tun hatte. Den Fehler habe ich auch nur deshalb bemerkt weil an einem anderen Port wo eine weiter LED dran war immer mal wieder ein kurzes Signal anlag. Und das habe ich erst festgestellt als ich den Serialmonitor angeschalten und mir den Port ausgeben lassen habe.
Vielen Dank für den Code. Ich hab ihn mir jetzt eine Weile angesehen und er gib mir viele neue Ansätze wie man das Programmieren kann. So finde ich den Befehl "switch" sehr interessant. Alles an dem Code habe ich noch nicht verstanden. So z.B. das du die Pins mit "constexpr" definierst. Ich konnte den Befehl auf der Arduinoseite "Sprach-Referenz" nicht finden. Genau wie den Befehl "enum" in Zeile 19 für "state" welche du in "switch" benutzt hast.
Leider funktioniert der Code noch nicht so wie erhofft. Der "endlagenSchalterPin {8}" wechselt andauernd von HIGH auf LOW und zurück wenn der Schalter aus ist. Ist der Schalter betätigt bleibt er auf LOW.
Ich versuche mal weiter ob ich selber herrausfinde wo der Fehler liegt.
Die zeigt nur einen winzigen Ausschnitt, von dem was möglich ist.
evtl. möchtest du eins dieser schönen, dicken und modernen C++ Grundlagenbücher lesen
Vielen dank, aber meine Englischkenntnisse sind nicht sonderlich gut. In vielen Fällen kann ich mir zwar mit DeepL.com helfen, aber wenn es sich vermeiden lässt versuche ich deutschsprachig zu bleiben.
Dann wirst Du in der Programmierung meist schlechte Karten haben (zumindest online). Da bleiben dann nur die Bücher (z.B. dieses).
Achtung: Da geht es um die Sprache C++, Arduino wird dort nicht erwähnt.
Ja, Danke. Das hat geholfen. Funktioniert zwar noch immer nicht ganz so wie ich mir das Vorstelle, aber ich will mal schauen ob ich das jetzt selber hinbekomme.
Ich danke allen die mir hier soweit geholfen haben.