Robin2:
AccelStepper can certainly make two (or more) motors work at the same time if you don't need them to finish at the same time. And AFAIK it can work with that motor shield (as well as with specialized stepper drivers).
...R
yes... i understand that it can work. but adafruit provides one example for their shield and it is as follows:
// Shows how to run three Steppers at once with varying speeds
//
// Requires the Adafruit_Motorshield v2 library
// https://github.com/adafruit/Adafruit_Motor_Shield_V2_Library
// And AccelStepper with AFMotor support
// https://github.com/adafruit/AccelStepper
// This tutorial is for Adafruit Motorshield v2 only!
// Will not work with v1 shields
#include <AccelStepper.h>
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
Adafruit_MotorShield AFMSbot(0x61); // Rightmost jumper closed
Adafruit_MotorShield AFMStop(0x60); // Default address, no jumpers
// Connect two steppers with 200 steps per revolution (1.8 degree)
// to the top shield
Adafruit_StepperMotor *myStepper1 = AFMStop.getStepper(200, 1);
Adafruit_StepperMotor *myStepper2 = AFMStop.getStepper(200, 2);
// Connect one stepper with 200 steps per revolution (1.8 degree)
// to the bottom shield
Adafruit_StepperMotor *myStepper3 = AFMSbot.getStepper(200, 2);
// you can change these to DOUBLE or INTERLEAVE or MICROSTEP!
// wrappers for the first motor!
void forwardstep1() {
myStepper1->onestep(FORWARD, SINGLE);
}
void backwardstep1() {
myStepper1->onestep(BACKWARD, SINGLE);
}
// wrappers for the second motor!
void forwardstep2() {
myStepper2->onestep(FORWARD, DOUBLE);
}
void backwardstep2() {
myStepper2->onestep(BACKWARD, DOUBLE);
}
// wrappers for the third motor!
void forwardstep3() {
myStepper3->onestep(FORWARD, INTERLEAVE);
}
void backwardstep3() {
myStepper3->onestep(BACKWARD, INTERLEAVE);
}
// Now we'll wrap the 3 steppers in an AccelStepper object
AccelStepper stepper1(forwardstep1, backwardstep1);
AccelStepper stepper2(forwardstep2, backwardstep2);
AccelStepper stepper3(forwardstep3, backwardstep3);
void setup()
{
AFMSbot.begin(); // Start the bottom shield
AFMStop.begin(); // Start the top shield
stepper1.setMaxSpeed(100.0);
stepper1.setAcceleration(100.0);
stepper1.moveTo(24);
stepper2.setMaxSpeed(200.0);
stepper2.setAcceleration(100.0);
stepper2.moveTo(50000);
stepper3.setMaxSpeed(300.0);
stepper3.setAcceleration(100.0);
stepper3.moveTo(1000000);
}
void loop()
{
// Change direction at the limits
if (stepper1.distanceToGo() == 0)
stepper1.moveTo(-stepper1.currentPosition());
if (stepper2.distanceToGo() == 0)
stepper2.moveTo(-stepper2.currentPosition());
if (stepper3.distanceToGo() == 0)
stepper3.moveTo(-stepper3.currentPosition());
stepper1.run();
stepper2.run();
stepper3.run();
}
this is almost useless because there are no commends to explain what its doing, while it is pretty apparent. Its moving the motors back and fourth constantly.
this code in no way helps me do something useful like precision stepper movements and i cannot for the life of me figure out how to translate it to my code, which looks like this friggin mess:
yAxis->step(1050, BACKWARD, DOUBLE);delay(5000);
xAxis->step(1050, FORWARD, DOUBLE);yAxis->step(650, FORWARD, DOUBLE);
zAxis->step(950, FORWARD, DOUBLE);delay(4000);zAxis->step(950, BACKWARD, DOUBLE);
xAxis->step(500, FORWARD, DOUBLE);yAxis->step(650, BACKWARD, DOUBLE);
zAxis->step(950, FORWARD, DOUBLE);delay(4000);zAxis->step(950, BACKWARD, DOUBLE);
xAxis->step(425, FORWARD, DOUBLE);yAxis->step(650, FORWARD, DOUBLE);
zAxis->step(950, FORWARD, DOUBLE);delay(4000);zAxis->step(950, BACKWARD, DOUBLE);
xAxis->step(525, FORWARD, DOUBLE);yAxis->step(650, BACKWARD, DOUBLE);
zAxis->step(950, FORWARD, DOUBLE);delay(4000);zAxis->step(950, BACKWARD, DOUBLE);
xAxis->step(875, FORWARD, DOUBLE);
zAxis->step(950, FORWARD, DOUBLE);delay(4000);zAxis->step(950, BACKWARD, DOUBLE);
xAxis->step(550, FORWARD, DOUBLE);yAxis->step(650, FORWARD, DOUBLE);
zAxis->step(950, FORWARD, DOUBLE);delay(4000);zAxis->step(950, BACKWARD, DOUBLE);
xAxis->step(3025, BACKWARD, DOUBLE);yAxis->step(400, FORWARD, DOUBLE);
and that is just one drink! i have almost 50! please provide me an example snippet of code if you are able. thank you