74 lines
1.6 KiB
C++
74 lines
1.6 KiB
C++
/// Mcopy Projector Class
|
|
|
|
#include "McopyProjector.h"
|
|
#include "IteadDualStepperShield.h"
|
|
|
|
McopyProjector::McopyProjector () {
|
|
|
|
}
|
|
|
|
void McopyProjector::begin () {
|
|
steppers.setup();
|
|
steppers.setSpeed(0, _speed);
|
|
steppers.setSpeed(1, _speed);
|
|
}
|
|
|
|
void McopyProjector::setDirection (bool dir) {
|
|
_dir = dir;
|
|
if (_dir) {
|
|
steppers.setDir(0, FORWARD);
|
|
steppers.setDir(1, FORWARD);
|
|
} else {
|
|
steppers.setDir(0, BACKWARD);
|
|
steppers.setDir(1, BACKWARD);
|
|
}
|
|
}
|
|
|
|
void McopyProjector::frame (bool dir) {
|
|
if (dir != _dir) {
|
|
setDirection(dir);
|
|
}
|
|
steppers.step(FEED, _stepsPerFrame, _dir ? FORWARD : BACKWARD);
|
|
_posTakeup += dir ? _stepsPerFrame : -_stepsPerFrame;
|
|
_posFeed += dir ? _stepsPerFrame : -_stepsPerFrame;
|
|
}
|
|
|
|
void McopyProjector::adjust(uint8_t motor, int64_t steps) {
|
|
uint64_t s = abs(steps);
|
|
if (steps < 0) {
|
|
steppers.setDir(motor, BACKWARD);
|
|
} else {
|
|
steppers.setDir(motor, FORWARD);
|
|
}
|
|
steppers.step(motor, s, _dir ? FORWARD : BACKWARD);
|
|
if (motor == 0) {
|
|
_posTakeup += steps;
|
|
} else if (motor == 1) {
|
|
_posFeed += steps;
|
|
}
|
|
//restore set direction after adjustment
|
|
steppers.setDir(motor, _dir ? FORWARD : BACKWARD);
|
|
}
|
|
|
|
void McopyProjector::adjustBoth(int64_t steps) {
|
|
uint64_t s = abs(steps);
|
|
if (steps < 0) {
|
|
steppers.setDir(TAKEUP, BACKWARD);
|
|
steppers.setDir(FEED, BACKWARD);
|
|
} else {
|
|
steppers.setDir(TAKEUP, FORWARD);
|
|
steppers.setDir(FEED, FORWARD);
|
|
}
|
|
steppers.stepBoth(s);
|
|
_posTakeup += steps;
|
|
_posFeed += steps;
|
|
|
|
//restore set direction after adjustment
|
|
steppers.setDir(TAKEUP, _dir ? FORWARD : BACKWARD);
|
|
steppers.setDir(FEED, _dir ? FORWARD : BACKWARD);
|
|
}
|
|
|
|
void McopyProjector::frames(bool dir, uint64_t count) {
|
|
|
|
}
|