// https://wokwi.com/projects/426553084377452545
// for https://forum.arduino.cc/t/having-trouble-running-multiple-steppers-at-constant-speed-using-accelstepper/1367416
// based on:
// https://wokwi.com/projects/410062239608936449
// Code from https://github.com/waspinator/AccelStepper/blob/master/examples/MultipleSteppers/MultipleSteppers.pde
// Other example simulations https://forum.arduino.cc/t/wokwi-simulations-for-arduino-built-in-examples/1304754
//
// MultiStepper.pde
// -*- mode: C++ -*-
//
// Shows how to multiple simultaneous steppers
// Runs one stepper forwards and backwards, accelerating and decelerating
// at the limits. Runs other steppers at the same time
//
// Copyright (C) 2009 Mike McCauley
// $Id: MultiStepper.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $
#include <AccelStepper.h>
// Define some steppers and the pins the will use
AccelStepper stepper1; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
AccelStepper stepper2(AccelStepper::FULL4WIRE, 6, 7, 8, 9);
AccelStepper stepper3(AccelStepper::FULL2WIRE, 10, 11);
float Speed = 200;
void setup()
{
stepper1.setMaxSpeed(Speed);
stepper1.setAcceleration(100.0);
stepper1.moveTo(Speed);
stepper2.setMaxSpeed(Speed);
stepper2.setAcceleration(100.0);
stepper2.moveTo(2*Speed);
stepper3.setMaxSpeed(Speed);
stepper3.setAcceleration(100.0);
stepper3.moveTo(3*Speed);
stepper1.setSpeed(Speed);
stepper2.setSpeed(Speed);
stepper3.setSpeed(Speed);
}
void loop()
{
// Change direction at the limits
if (stepper3.distanceToGo() == 0) {
stepper1.moveTo(-stepper1.currentPosition());
stepper2.moveTo(-stepper2.currentPosition());
stepper3.moveTo(-stepper3.currentPosition());
// since moveTo() has the side-effect of
// recalculating the speed and setting it to minimum
// we need to manually control the desired speed:
stepper1.setSpeed(Speed);
stepper2.setSpeed(Speed);
stepper3.setSpeed(Speed);
delay(1000);
}
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
stepper3.runSpeedToPosition();
}