Hallo,

ich versuche 2 Stepper nacheinander anzusteuern und wenn ich M2 durch ein LOW an PIN 2 stoppe, soll M3 laufen bis erneut ein LOW an PIN 2 erschient. Das ist der Code dazu

Code:
#include <CustomStepper.h>   //Libraryaufruf

CustomStepper stepperM2(4, 5, 6, 7);   // Wahl der Ausgänge für den Schrittmotor
CustomStepper stepperM3(8, 9, 10, 11);   // Wahl der Ausgänge für den Schrittmotor

boolean M2solldrehen = false;       // Variable, die bei true den Motor stoppt; kann beliebig heißen
boolean M3solldrehen = false;
boolean JustPin;       // Variable für STOP , wenn LOW
float lzahn2_alt;            // Ausfahrlänge von Zahnstange 2 nach Justierung   98
float lzahn3_alt;            // Ausfahrlänge von Zahnstange 3 nach Justierung     68


int Motorwahl = 2;         // Festlegung welcher Motor justiert werden soll


void setup()
{
  Serial.begin (250000);
  while (!Serial);

  pinMode (2, INPUT);
  digitalWrite(2, HIGH);   //schaltet den PullUp-Widerstand ein

  stepperM2.setRPM(6);    //  Wahl der Umdrehungen pro Minute
  stepperM3.setRPM(12);

  stepperM2.setSPR(4096);      //Original =  4075.7728395;   Wahl der Schritte pro Wellenumdrehung
  stepperM3.setSPR(4096);

}

void loop() {

  JustPin = digitalRead(2);   // übernimmt den Status von PIN 2


  //******************** Motor 2 ************************************************************

  if (stepperM2.isDone() && M2solldrehen == false && Motorwahl == 2 ) {    // einleiten des Vorgangs an die Library  && Motorwahl == 2

    stepperM2.setDirection(CW);          // Zahnstange2  einfahren

    stepperM2.rotateDegrees(5);         //ergibt eine kurze Lauflänge der Zahnstange

    if ( JustPin == LOW) {  //  bei LOW Motor STOP;    LOW wegen internem PullUp-Widerstand
      M2solldrehen = true;    // stoppt den Motor
      Motorwahl = 3;       //  wählt nun Motor 3
 
    }

  }


  //******************** Motor 3 ************************************************************

  Serial.print ("Motorwahl = ");
  Serial.println (Motorwahl);

  if (stepperM3.isDone() && M3solldrehen == false && Motorwahl == 3) {    // einleiten des Vorgangs an die Library

    Serial.println ("hier");

    stepperM3.setDirection(CCW);          // Zahnstange2  einfahren

    stepperM3.rotateDegrees(5);        //ergibt eine kurze Lauflänge der Zahnstange

    if ( JustPin == LOW) {  //  bei LOW Motor STOP;     LOW wegen internem PullUp-Widerstand
      M3solldrehen = false;    // stoppt den Motor
      //     Motorwahl = 3;       //  wählt nun Motor 3

    }
  }  

  stepperM2.run();          // muss unbedingt sein
  stepperM3.run();          // muss unbedingt sein
}
Wenn ich den Teil für M3 unwirksam mache, läuft M2 und umgekehrt. Aber das volle Programm nicht.
Dann wird nur 1 x Pin 4 auf HIGH gesetzt, die Konsole druckt "Motorwahl = 2" , aber nur 1 x und das war's.
d.h. doch, dass das Programm nicht mehr läuft!?


Wieso klappt das in dem folgenden Beispiel mit 2 Motoren und im Original ja sogar mit 4en?

Code:
#include <CustomStepper.h>


CustomStepper stepper_VL(4, 5, 6, 7);
//CustomStepper stepper_HL(8,9,10,11);
CustomStepper stepper_HR(8, 9, 10, 11);
//CustomStepper stepper_VR(46, 48, 50, 52);


boolean rotate_li;
boolean rotate_deg_li;
boolean rotate_re;
boolean rotate_deg_re;
boolean vorwaerts;
boolean rueckwaerts;

void setup()
{

  rotate_li = false;
  rotate_deg_li = false;
  rotate_re = false;
  rotate_deg_re = false;
  vorwaerts = false;
  rueckwaerts = false;


}

void loop()
{

  if (stepper_VL.isDone() &&  rueckwaerts == false)
  {
    alle_stepper_rueckwaerts();

  }

  if (stepper_VL.isDone() &&  rueckwaerts == true && rotate_li == false)
  {
    rotieren_links();
  }

  if (stepper_VL.isDone() &&  rotate_li == true && vorwaerts == false)
  {
    alle_stepper_vorwaerts();

  }

  if (stepper_VL.isDone() &&  vorwaerts == true && rotate_re == false)
  {
    rotieren_rechts();
  }

  if (stepper_VL.isDone() &&  rotate_re == true && vorwaerts == true)
  {
    alle_stepper_vorwaerts();
  }

  stepper_VL.run();
  //  stepper_HL.run();
  stepper_HR.run();
  //  stepper_VR.run();

}

/***********************************************************/

void alle_stepper_vorwaerts()
{
  stepper_VL.setRPM(12);
  //  stepper_HL.setRPM(12);
  stepper_HR.setRPM(12);
  //  stepper_VR.setRPM(12);

  stepper_VL.setSPR(4075.7728395);
  //  stepper_HL.setSPR(4075.7728395);
  stepper_HR.setSPR(4075.7728395);
  //  stepper_VR.setSPR(4075.7728395);

  stepper_VL.setDirection(CW);
  stepper_VL.rotate(2);
  //  stepper_HL.setDirection(CW);
  //  stepper_HL.rotate(2);
  stepper_HR.setDirection(CW);
  stepper_HR.rotate(2);
  //   stepper_VR.setDirection(CW);
  //   stepper_VR.rotate(2);
  vorwaerts = true;
}

void alle_stepper_rueckwaerts()
{
  stepper_VL.setRPM(12);
  //  stepper_HL.setRPM(12);
  stepper_HR.setRPM(12);
  //  stepper_VR.setRPM(12);

  stepper_VL.setSPR(4075.7728395);
  //  stepper_HL.setSPR(4075.7728395);
  stepper_HR.setSPR(4075.7728395);
  //  stepper_VR.setSPR(4075.7728395);

  stepper_VL.setDirection(CCW);
  stepper_VL.rotate(2);
  //  stepper_HL.setDirection(CCW);
  //  stepper_HL.rotate(2);
  stepper_HR.setDirection(CCW);
  stepper_HR.rotate(2);
  //    stepper_VR.setDirection(CCW);
  //    stepper_VR.rotate(2);
  rueckwaerts = true;
}

void rotieren_links()
{
  stepper_VL.setRPM(12);
  //  stepper_HL.setRPM(12);
  stepper_HR.setRPM(12);
  //  stepper_VR.setRPM(12);

  stepper_VL.setSPR(4075.7728395);
  //  stepper_HL.setSPR(4075.7728395);
  stepper_HR.setSPR(4075.7728395);
  //  stepper_VR.setSPR(4075.7728395);

  stepper_VL.setDirection(CCW);
  stepper_VL.rotate(2);
  //  stepper_HL.setDirection(CCW);
  //  stepper_HL.rotate(2);
  stepper_HR.setDirection(CW);
  stepper_HR.rotate(2);
  //    stepper_VR.setDirection(CW);
  //    stepper_VR.rotate(2);
  rotate_li = true;
}


void rotieren_rechts()
{
  stepper_VL.setRPM(12);
  //  stepper_HL.setRPM(12);
  stepper_HR.setRPM(12);
  //  stepper_VR.setRPM(12);

  stepper_VL.setSPR(4075.7728395);
  //  stepper_HL.setSPR(4075.7728395);
  stepper_HR.setSPR(4075.7728395);
  //  stepper_VR.setSPR(4075.7728395);
Gruß fredyxx