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
Wenn ich den Teil für M3 unwirksam mache, läuft M2 und umgekehrt. Aber das volle Programm nicht.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 }
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?
Gruß fredyxxCode:#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);







Zitieren

Lesezeichen