kurze Hilfe bitte, stehe am Schlauch (while, if)

Hallo zusammen am Sonntag mittag.

Macht es im folgendem Beispiel einen Unterschied, ob ich if oder while nehme oder stehe ich wirklich am Schlauch?

stepper1.moveTo(270);                             // fahre Hülsenmotor zur aufnahme
stepper2.moveTo(-680);                              // fahre Schubmotor zur maschine
while ((stepper1.distanceToGo() != 0) || (stepper2.distanceToGo() != 0)){
stepper1.run();
stepper2.run();
}
stepper1.moveTo(270);                             // fahre Hülsenmotor zur aufnahme
stepper2.moveTo(-680);                              // fahre Schubmotor zur maschine
if ((stepper1.distanceToGo() != 0) || (stepper2.distanceToGo() != 0)){
stepper1.run();
stepper2.run();
}

Grüße aus der Oberpfalz

Christian

Hi

Solange nichts weiter in der Loop ausgeführt werden muss, macht es keinen offensichtlichen Unterschied.
Das Problem ist nur, dass wenn dein Programm "gleichzeitig" noch auf etwas anderes reagieren soll (z.B. Not-Aus Taster), wird das mit der while() nicht funktionieren.
Du kannst dir das so vorstellen: Mit while() bleibt das Programm solange in der Schleife, bis die Bedingung erfüllt ist. Mit if() wird die Loop durchlaufen, wenn if() wahr dann führe das aus, was im if() Block steht, wenn if() nicht wahr, dann fahre mit dem restlichen Code weiter....

Hoffe, dass das so verständlich war.

Grüsse
Peter

Hallo Peter,

danke für deine Zeilen. Hab noch viel mehr Code. >> also dann if !

Gruß

Christian

Wir kennen nicht deinen ganzen Code und nicht die library, die benutzt wird.
ich gehe aber davon aus, dass stepper.run() nur jeweils 1 step triggert.

Bedeutet, dass bei der while-Schleife diese bis zur Erfüllung der Abfragebedingung immer wieder steps generiert werden.
Bei der if-Abfrage wird jedoch immer wieder zum Anfang der loop() zurückgesprungen, dann die Zielkoordinaten wieder neu eingelesen und dann erst der nächste step getriggert.

Hast du dann noch andere Befehle in der main loop(), im schlimmsten Fall einen oder mehrere delay-Befehle, dann werden die Motoren nur sehr gequält langsam und wahrscheinlich sehr unruhig laufen, wenn überhaupt.

Also:

  • while-Schleife nehmen, dann bist du auf der sicheren Seite, wenn während des Motorlaufs nichts weiter gemacht werden soll
  • if-Schleife nehmen, wenn noch mehr zeitnah ausgeführt werden soll, aber alle unnötigen Verzögerungen vermeiden, und ALLE delays raus und timer durch millis ersetzen, wenn unbedingt nötig