fredyxx
24.05.2016, 12:39
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
#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?
#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
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
#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?
#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