Hallo zusammen, ich habe bei meinem Arduino Programm ein Problem und zwar meine Schaltung ist an einer Externen Anlage angeschlossen diese gibt mir Signale die ich verarbeite und dann zurück an die Anlage schicke um diese teils zu steuern Ich lasse den Code "parallel" laufen über den Befehl millis ich kann daher kein delay verwenden zumal das ja sowieso nie gern gesehen wird. Kommen wir nun zu dem Problem ich setzte meine Signale über if befehle und die Anlage schafft es nicht schnell genug ihr Signale zurück zu nehmen wenn ich meine setze gibt es da eine Möglichkeit wie ich mein Signal für einen Zeitraum von 0-20 sek gesetzt halten kann obwohl für mein anfangs if immer noch HIGH kommt? danke an alle die sich hierfür mühe und Gedanken machen der Code ist im Anhang mal beigefügt es geht sich hierbei um BOM1 bis BOM6 ein versuch das zu lösen ist noch im Code aber als Kommentar
Beitrag #6957923 wurde von einem Moderator gelöscht.
Beitrag #6957925 wurde von einem Moderator gelöscht.
Beitrag #6957928 wurde von einem Moderator gelöscht.
Da hilft erst mal, seine Gedanken zu ordnen. Vor allem, wenn die so sind, wie der Schreibstil! Zuerst mal einen Ablaufplan zu Papier bringen, was wo wie unter welchen Bedingungen passieren soll. Vielleicht mal lesen, was ein Automat ist. Und auch konsequent Variablennamen oder defines verwenden, damit das Programm lesbar wird.
Benutze state machines: https://www.mikrocontroller.net/articles/Statemachine und für die Zeiten timeouts. Diese kannst du auch mit millis machen. Bevor du in den Zustand "Schranke öffnen" gehst speicherst du den aktuellen millis-Wert. Im Zustand "Schranke öffnen" ziehst du vom momentanen millis-Wert deinen gespeicherten ab. Dann weißt du wieviel Zeit vergangen ist. Generell solltest du auch erst alle Eingänge einlesen, dann verarbeiten und dann alle Ausgänge setzen. Die Ausgangszustände gibst du also nicht gleich aus, sondern speicherst sie zwischen. Dadurch kannst du eine feste Zykluszeit erreichen. Macht jede SPS so. Statt millis wäre ein Timerinterrupt besser. Damit kannst du deine Programmlaufzeiten besser aufteilen.
Guten Morgen zusammen, da es ein Projekt für die Arbeit ist war ich am Wochenende nicht mehr hier drauf um zu Lesen. Ich versuche das mal im laufe des Tages zu realisieren mit der Statemachine. Die Beschreibung von dieser ist ja 1:1 das was ich brauche. vielen Dank ich werden mich wieder melden wenn ich mehr dazu an infos habe. Gruß Nicolas
Nicolas schrieb: > danke an alle die sich hierfür mühe und Gedanken machen Die Mühe, den Text in vernünftigen Sätzen niederzuschreiben, kannst du dir gerne selber machen. Ohne "Punkt und Komma" ist das unlesbar. Soetwas vor dem WE noch schnell rauszuhauen, damit die anderen schon mal dran arbeiten können, ist nicht so toll.
Helmut -. schrieb: > Zuerst mal einen Ablaufplan zu Papier > bringen, was wo wie unter welchen Bedingungen passieren soll. Oder wenigstens ein "Timing-Diagramm", was da wie lange von wem wo angeglegt wird oder werden muss und wie dann darauf reagiert werden soll. Nicolas schrieb: > ich setzte meine Signale über if befehle > und die Anlage schafft es nicht schnell genug ihr Signale zurück zu > nehmen wenn ich meine setze gibt es da eine Möglichkeit wie ich mein > Signal für einen Zeitraum von 0-20 sek gesetzt halten kann obwohl für > mein anfangs if immer noch HIGH kommt? Lies dir auch das Kapitel "Handshake" durch, denn das, was mit Zeiten grad mal so hingefrickelt wird, funktioniert entweder nur, wenn man Prozesszeit verplempern darf oder wenn man es tolerieren kann, falls es "ab und zu mal" nicht funktioniert. Nöglicherweise brauchst du aber auch nur eine sogenannte "Flankenerkennung", die eine steigende Flanke im "Signal" der "Anlage" erkennt...
Hallo nochmal, ich habe das mit der Statemachine probiert und alles fuktioniert. Wollte nur noch eine kurze Rückmeldung geben. vielen Dank
Hallo, Tipp. Befasse dich einmal mit Arrays und struct. Deine Programme werden übersichtlicher und einfacher zu pflegen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.