1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #include "MultiStepper.h"
- #include "AccelStepper.h"
- MultiStepper::MultiStepper()
- : _num_steppers(0)
- {
- }
- boolean MultiStepper::addStepper(AccelStepper& stepper)
- {
- if (_num_steppers >= MULTISTEPPER_MAX_STEPPERS)
- return false;
- _steppers[_num_steppers++] = &stepper;
- return true;
- }
- void MultiStepper::moveTo(long absolute[])
- {
-
- float longestTime = 0.0;
- uint8_t i;
- for (i = 0; i < _num_steppers; i++)
- {
- long thisDistance = absolute[i] - _steppers[i]->currentPosition();
- float thisTime = abs(thisDistance) / _steppers[i]->maxSpeed();
- if (thisTime > longestTime)
- longestTime = thisTime;
- }
- if (longestTime > 0.0)
- {
-
-
- for (i = 0; i < _num_steppers; i++)
- {
- long thisDistance = absolute[i] - _steppers[i]->currentPosition();
- float thisSpeed = thisDistance / longestTime;
- _steppers[i]->moveTo(absolute[i]);
- _steppers[i]->setSpeed(thisSpeed);
- }
- }
- }
- boolean MultiStepper::run()
- {
- uint8_t i;
- boolean ret = false;
- for (i = 0; i < _num_steppers; i++)
- {
- if ( _steppers[i]->distanceToGo() != 0)
- {
- _steppers[i]->runSpeed();
- ret = true;
- }
- }
- return ret;
- }
- void MultiStepper::runSpeedToPosition()
- {
- while (run())
- ;
- }
|