Probleme mit Multistepper/ AccelStepper librarie

Hallo,
in meinem Sketch zur Steuerung zweier Schrittmotoren mit unterschiedlichen Geschwindigkeiten und Richtungen mittels Joystick habe ich mich auf die in AccelStepper.h integrierte Multistepper Funktion beziehen wollen. Ich erhalte Fehlermeldungen bezüglich Multistepper. Ich hbe versucht, eine Multistepper.h über die Bibliotheksverwaltung einzubinden, kann dort aber keine finden. Ich war der Meinung, dass sie in Accel.Stepper eingebunden ist.
#include <Multistepper.h> ????
Um MultiStepper mit denj beiden Schrittmotoren zu initialisieren, habe ich das Objekt "multistepper" definiert:

Multistepper multistepper; Zeile 28

Bitte an die Experten, wo ist meinFehler?

Beste Grüße und Glückwünsche zum Internationalen Frauentag an alle weiblichen User, die heute online sind ;-)

Sketch:

// Arduino Sketch für die Steuerung von zwei NEMA 17 Schrittmotoren mit einem Joystick Shield und Endschaltern

#include <AccelStepper.h>  // 
// #include <MultiStepper.h>  //  

// Pins für den TB6600 Treiber
const int stepPinX = 2;  // Schrittpuls (Step) für Motor X
const int dirPinX = 3;   // Richtungssteuerung (Direction) für Motor X
const int stepPinY = 4;  // Schrittpuls (Step) für Motor Y
const int dirPinY = 5;   // Richtungssteuerung (Direction) für Motor Y

// Pins für die Endschalter
const int endSwitchXMin = 6;  // Endschalter für Motor X (Min-Position)
const int endSwitchXMax = 7;  // Endschalter für Motor X (Max-Position)
const int endSwitchYMin = 8;  // Endschalter für Motor Y (Min-Position)
const int endSwitchYMax = 9;  // Endschalter für Motor Y (Max-Position)

// Joystick Shield Pins
const int joyXPin = A0;       // Joystick X-Achse
const int joyYPin = A1;       // Joystick Y-Achse
const int joyButtonPin = 10;  // Joystick Button

// Schrittmotor-Objekte
AccelStepper stepperX(AccelStepper::DRIVER, stepPinX, dirPinX);
AccelStepper stepperY(AccelStepper::DRIVER, stepPinY, dirPinY);

// MultiStepper-Objekt für parallele Steuerung
MultiStepper multiStepper;

void setup() {
  // Initialisierung der Schrittmotoren
  stepperX.setMaxSpeed(1000);  // Maximale Schrittgeschwindigkeit für Motor X
  stepperY.setMaxSpeed(1000);  // Maximale Schrittgeschwindigkeit für Motor Y

  // Endschalter-Pins als Eingänge konfigurieren
  pinMode(endSwitchXMin, INPUT_PULLUP);
  pinMode(endSwitchXMax, INPUT_PULLUP);
  pinMode(endSwitchYMin, INPUT_PULLUP);
  pinMode(endSwitchYMax, INPUT_PULLUP);

  // Joystick Button-Pin als Eingang konfigurieren
  pinMode(joyButtonPin, INPUT_PULLUP);

  // MultiStepper mit beiden Schrittmotoren initialisieren
  multiStepper.addStepper(stepperX);
  multiStepper.addStepper(stepperY);
}

void loop() {
  // Joystick-Werte auslesen
  int joyX = analogRead(joyXPin);
  int joyY = analogRead(joyYPin);
  bool joyButtonPressed = digitalRead(joyButtonPin) == LOW;

  // Bewegung basierend auf Joystick-Eingaben
  if (joyX < 400) {
    multiStepper.moveTo(-1000, 0);  // Motor X nach links bewegen
  } else if (joyX > 600) {
    multiStepper.moveTo(1000, 0);  // Motor X nach rechts bewegen
  } else {
    multiStepper.moveTo(0, 0);  // Motor X anhalten
  }

  if (joyY < 400) {
    multiStepper.moveTo(0, -1000);  // Motor Y nach oben bewegen
  } else if (joyY > 600) {
    multiStepper.moveTo(0, 1000);  // Motor Y nach unten bewegen
  } else {
    multiStepper.moveTo(0, 0);  // Motor Y anhalten
  }

  // Endschalter-Überprüfung
  if (digitalRead(endSwitchXMin) == LOW) {
    stepperX.setCurrentPosition(0);  // Motor X auf Min-Position setzen
  }
  if (digitalRead(endSwitchXMax) == LOW) {
    stepperX.setCurrentPosition(1000);  // Motor X auf Max-Position setzen
  }
  if (digitalRead(endSwitchYMin) == LOW) {
    stepperY.setCurrentPosition(0);  // Motor Y auf Min-Position setzen
  }
  if (digitalRead(endSwitchYMax) == LOW) {
    stepperY.setCurrentPosition(1000);  // Motor Y auf Max-Position setzen
  }

  // Bewegung ausführen
  multiStepper.runSpeedToPosition();

  // Joystick-Button für Not-Aus verwenden
  if (joyButtonPressed) {
    stepperX.setCurrentPosition(0);
    stepperY.setCurrentPosition(0);
  }

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Mir ist nicht ganz klar, wozu Du Multistepper überhaupt einsetzen willst. MultiStepper ist für den synchronen Betrieb 2er Stepper gedacht. D.h. Du definierst für beide Stepper ein Ziel, und MultiStepper steuert die Geschwindigkeit so, dass beide Stepper gleichzeitig am Ziel ankommen.
Wenn Du 2 Stepper gleichzeitig betreiben willst, und einer wird über den X-Ausschlag, und der andere Über den Y-Ausschlag des Joysticks gesteuert, brauchst Du MultiStepper nicht.

MultiStepper ist Teil der AccelStepper Lib und muss nicht extra installiert werden. Allerdings verwendest Du es falsch. Die Zielpositionen für den Synchronlauf werden über ein Array vorgegeben und nicht einzeln im Aufruf.

P.S. Erklär mal genauer, was Du überhaupt machen willst. So wie er jetzt ist, wird dein Sketch nicht funktionieren - egal was Du vorhast.

Es ist schon richtig gedacht, y- und x- Schritte sollten schon synchron verlaufen. Wichtig für
exakte z.B. Kreisbewegung unterschiedlicher Geschwindigkeit. Die Funktion wird anstelle der manuellen JOY- Werte X/Y eingelesen.
Habe die MultiStepper.h gefunden (GitHub) und binde sie händisch ein. Dann wird es schon klappen. Vielen Dank für deine Mühe. Gruß, Gerhard

Multistepper kann keine Kreisbewegungen - nur synchrone Linearbewegungen.

?? MultiStepper gehört zu AccelStepper Lib. Was hast Du da gefunden?

Aber wenn Du keine weitere Hilfe willst, OK, dann halte ich mich raus.

Hallo, habe die MultiStepper heruntergeladen und die Zip Datei über Sketch-> Bibl. einbinden-> Zip Bibl. hinzufügen installiert. Dann ging alles ganz schnell.
Des weiteren hatte ich noch eine recht alte AccelStepper Lib. installiert, diese hatte ich nun durch die letzte verfügbare ersetzt.
"Multistepper kann keine Kreisbewegungen - nur synchrone Linearbewegungen." Stimmt, also unbrauchbar für mein Projekt, war ein zu schnell gedachtes Herangehen. Damit können wir dieses Thema als gelöst betrachten.
Vielen Dank für die Hilfe, habe früher mal in C programmiert, ist schon einige Jährchen her und es hat sich viel getan. In Arduino habe ich schon einige Projekte verwirklicht, muss aber noch viel dazulernen. Mit 80 Jahren hat man nicht mehr viel Zeit :wink: macht aber Spaß, vor allem wenn wieder eine Aufgabe gelöst ist. Im Alter wird man stur? Dann werde ich mich mal weiter um die für mich neue Funktion mit MultiStepper bemühen. Habe gerade noch keinen Befehl gefunden, 3 Schrittmotoren gleichzeitig zum Anhalten zu bringen. Ein steppers.stop habe ich in der Bibliothek nicht gefunden, versuche es mit Position anfahren. Habe da eine Idee, dass sie aktuelle POS ausgelesen, um 200 verringert bzw. vergrößert wird, je nachdem, ob eine Linearführung oben oder unten beendet wird und dorthin soll dann gefahren werden steppers.move(200);
Suche gerade eine Funktion zum Auslesen der steppers- Position.
Vielen Dank!

Hallo, Kreise kann wohl keine dieserSchrittmotorbibliotheken aberdu musst ja keinen Kreis fahren sondern es reicht ja wahrscheinlich auch ein Vieleck und wenn dieses zb aus 180 Seiten besteht wirst du kaum einen Unterschied bemerken.

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