Break funktioniert nicht nach Programmstart, Schleife wird immer neu aufgerufen

Hallo, das ist mir schon klar, es funktioniert ja alles wunderbar, bis eben auf das Problem des zu lange dauernden "Abbremsvorgangs". Kannst du mir eine Antwort geben auf die Frage im Post post #18? Das wäre hilfreich. Die oben stehenden Posts sind abgearbeitet und entsprechend eurer klasse Hilfestellung konnte ich das Programm doch recht übersichtlich gestalten und die Funktionsaufrufe an passender Stelle funzen ebenso.

Sicher, aber das Arduino wird trotzdem neu gestartet, sobald das Problem behoben ist, sodass setup() ausgeführt wird.

Dennoch stimme ich zu, dass es manchmal erforderlich sein kann, einen HOMING-Vorgang durchzuführen, und dies kann durchgeführt werden, ohne dass das Gerät zurückgesetzt werden muss.

Ich bin mir nicht sicher, ob ich die Frage richtig verstehe

Da Sie zu Beginn des Vorgangs nicht wissen, wo Sie sich befinden, können Sie auch nicht vorhersehen, wann Sie langsamer fahren müssen. Sie wissen, wann Sie anhalten müssen, wenn Ihr Gerät den Endschalter berührt.

Wenn Sie langsamer werden möchten, wenn Sie sich der HOME-Position nähern, benötigen Sie ein Signal, das Ihrem Code mitteilt, dass Sie fast da sind. Ein zweiter Endschalter einige Zentimeter vor dem Ende könnte Abhilfe schaffen.

Ja, der Schrittmotor macht genau, was ich will. Es handelt sich hierbei um ein kleines Projekt, an dem ich a) ARDUINO "lernen" will und b) es ausserdem einem guten Zweck dienen soll. Es ist ein Gewächshaus, bei dem Türen und Fenster zeit- und temperaturgesteuert geöffnet und bei Regen etc. geschlossen werden sollen. Trenne ich z.B. bei geöffneter oder halb geschlossener Tür die Stromversorgung und schalte nach ein paar Minuten ein, dann wird die Home- Position erneut ermittelt und das Programm wird fortgesetzt, Tür geöffnet, Fenster geöffnet oder geschlossen und wenn es regnet, dann bleiben Türen und Fenster zu, Bewässerung schaltet ein je nach Zustand der Feuchte etc. und die "Schüttelautomatik" zum Bestäuben der Blüten zu bestimmten Zeiten, wenn die Luftfeuchte passt. Da benötige ich keinen "Einrichtbetrieb" wie in industriellen Anlagen, hat mehrere Probeläufe heil überstanden.

Ursprünglicher Code;

void loop() {
  // Homing
  digitalWrite(ENA, LOW);   			          // Motor aktivieren
  digitalWrite(DIR, LOW);    			          // Richtung festlegen, abhängig von den Anschlüssen der Motorwicklung 
  while (digitalRead(STOP1) == HIGH) {    	// Bewegung in Richtung STOP1
    digitalWrite(STEP, HIGH);
    delayMicroseconds(500);
    digitalWrite(STEP, LOW);
    delayMicroseconds(5 00);
    pos++;         

noch einmal zum besseren Verständnis, was mein Problem ist.
In meinem POST1 habe im Sketch zur Schrittmotorbewegung nach
"while (digitalRead(STOP1) == HIGH) { ;
die Richtung und Geschwindigkeit etc. durch

digitalWrite(STEP, HIGH);
    delayMicroseconds(500);
    digitalWrite(STEP, LOW);
    delayMicroseconds(5 00);
    pos++;        

angegeben. Und SOFORT, nach Betätigung des STOP Schalters bleibt der Motor stehen.
Verwende ich die AccelStepper.h Bibliothek, dann bleibt der Motor NICHT sofort stehen, sondern bewegt sich noch n Steps, wobei ich n nicht kenne. Und damit kann es passieren, dass der Schlitten über den Endschalter hinauswill und es zu mechanischen Überlastungen kommt.

Die verwende ich nicht, daher fehlt mir Erfahrung.

Aber in der Doku finde ich:

void AccelStepper::stop ( )
Sets a new target position that causes the stepper to stop as quickly as possible, using the current speed and acceleration parameters.

Bitte probiere und berichte :slightly_smiling_face:

Ich verstehe, was Sie sagen.

Dies ist effektiv impliziert, wenn Sie Beschleunigung und run() mit einem sehr weit entfernten Ziel verwenden.

Sie könnten versuchen, runSpeed() zu verwenden, das keine Beschleunigung implementiert, oder jeweils nur einen Schritt in der while() auszuführen und das Target zu ändern (-1), bis Sie die Endschalter auslösen

1 Like

Danke, das runSpeed() war hilfreich, muss noch etwas an den Parametern rumbasteln, habe die Bibliothek noch einmal genauer studiert.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.