Forum: Mikrocontroller und Digitale Elektronik Arduino Programmierung


von Nicolas (Gast)


Angehängte Dateien:

Lesenswert?

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.
von Helmut -. (dc3yc)


Lesenswert?

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.

von Noname (Gast)


Lesenswert?

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.

von Nicolas (Gast)


Lesenswert?

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

von Forist (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Nicolas (Gast)


Lesenswert?

Hallo nochmal,
ich habe das mit der Statemachine probiert und alles fuktioniert.
Wollte nur noch eine kurze Rückmeldung geben.
vielen Dank

von Veit D. (devil-elec)


Lesenswert?

Hallo,

Tipp. Befasse dich einmal mit Arrays und struct. Deine Programme werden 
übersichtlicher und einfacher zu pflegen.

von Forist (Gast)


Lesenswert?

Anscheinend geht es hier mit der V5 weiter:
Beitrag "Delay Arduino"

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
Noch kein Account? Hier anmelden.