Hallo Wie kann ich es am besten machen das der ATMEGA2560 nach Aufgabe A nicht Aufgabe B macht sondern zwischendrine Aufgabe Z mache und dann zu Aufgabe B springt ? Ich habe was von Interrupts gelesen die entweder nach zeit oder nach Pin Pegel wechsel steuern beides ist nicht ganz was ich mir vorstelle. Und Z überall einfügen würde schnell den speicher sprengen. Mal ein beispiel:(ja ich weiß ist müll aber zum zeigen reichts) void loop() { A digitalWrite(xx, HIGH); A delay(1000); Wechsel zu Z Weiter mit B B digitalWrite(xx, LOW); B delay(1000); Wechsel zu Z Weiter mit C C digitalWrite(xx, HIGH); C delay(1000); Wechsel zu Z Weiter mit D D digitalWrite(xx, LOW); D delay(1000); } void z Vielen dank.
bedingter sprung, "if…", funktionen definieren. c (oder jede andere programmiersprache) basics halt die man sich zusammengoogeln kann.
Jede aufgabe als funktion definieren und in deiner hauptschleife dann einen entsprechenden ablaufplan abarbeiten...
Danke euch! TestX Deine Idee klingt gut nur kann ich mir das nicht ganz vorstellen wie würde das etwa aussehen ?
im Interrupt, Timer oder PIN Change setzt du ein Flag if(!ich_soll_Z_machen) ich_soll_Z_machen = 1; in der loop if(ich_soll_Z_machen) z(); // in z() bevor es raus geht ich_soll_Z_machen=0;
:
Bearbeitet durch User
DAVID -. schrieb: > Wie kann ich es am besten machen das der ATMEGA2560 nach Aufgabe A nicht > Aufgabe B macht sondern zwischendrine Aufgabe Z mache und dann zu > Aufgabe B springt ? Du kannst zwischen A und B einfach einen Aufruf von Z einbauen. Bisher
1 | void loop() |
2 | {
|
3 | Aufgabe_A(); |
4 | Aufgabe_B(); |
5 | }
|
Mit Z
1 | void loop() |
2 | {
|
3 | Aufgabe_A(); |
4 | Aufgabe_Z(); |
5 | Aufgabe_B(); |
6 | }
|
Was willst du wirklich genau?
hmm ok danke dir meinst du das so ? void setup() { pinMode(13, OUTPUT); pinMode(10, OUTPUT); if(Test LED); digitalWrite(10, HIGH = 0; delay(1000); digitalWrite(10, LOW = 0; delay(1000); } void loop() { digitalWrite(13, HIGH); delay(1000); } if(Test LED)) z(=1); { digitalWrite(13, LOW); delay(1000); }
DAVID -. schrieb: > if(Test LED)) > z(=1); > { > digitalWrite(13, LOW); > delay(1000); > } wenn z 1 werden soll dann mache ein Zuweisung so: z=1; wenn z wirklich nur die LED anmachen soll dann lasse die LED gleich in der ISR angehen dann brauchst du nicht mehr, kein FLAG, kein Unterprogramm und keine Abfrage und keinen Sprung, vergiss das doofe Delay oder merke dir die Zeit von ON und wenn die abgelaufen ist in der loop schalte wieder aus.
:
Bearbeitet durch User
hallo wie gesagt die LED Sache sollte nur für mich zum verstehen sein gehen tut es um was anderes anderes. Es werden Sensoren abgefragt es werden Spannungen gemessen es werden Displays angesteuert und Daten auf ein Ethernet schilt gesendet welches kein int Pin rausgeführt hat. Problem dabei ist aber der ganze Durchlauf dauert um die 10 sek und da ist keine sinnvolle Ethernet Verbindung mehr möglich.
ohne delay programmieren! schau dir alternativen an.
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.