Harelabb 3 Stepper

You might also like

You are on page 1of 5

#include <SerialStepper.

h>
#include <arduinostepper.h>

// Define 3 steppers
Stepper steppers[3];

// each using an ArduinoStepper control


ArduinoStepperControl stepper_ctl[] = {
ArduinoStepperControl {0, 1, 2, 3}, // the pins
ArduinoStepperControl {4, 5, 6, 7},
ArduinoStepperControl { 8, 9, 10, 11}};

// Helper function to check if all the steppers has reached target


bool anyRunning() {
for (const auto& stepper : steppers) {
if (stepper.running()) {
return true;
}
}
return false;
}

void setup() {
/// Initialize the stepper motor controllers
for (auto& ctl : stepper_ctl) {
ctl.begin();
}

/// Assign steppers to the controllers


for (int i = 0; i < 3; ++i) {
stepper_ctl[i].addStepper(steppers[i]);
}

// Set stepper speed to 16 RPM


for (auto& stepper : steppers) {
stepper.speed(15);
}

// Forward is CCW
constexpr auto CW = Stepper::BACKWARD;
constexpr auto CCW = Stepper::FORWARD;

void loop() {
float pos = 0; // keep track of position

delay(4000);

// need to loop until time for next delay


// the clock must be updated before the step terget is set
loopClock::tick();

// set target for all steppers to 1 turn (360 degrees)


for (auto& stepper: steppers) {
stepper.direction(CCW);
stepper.turn(1.0);
}
// run the stepper until target
while (anyRunning()) {
loopClock::tick();
for (auto& ctl : stepper_ctl) {
ctl.run();
}
yield();
}

delay(2000);

// next
loopClock::tick();
for (auto& stepper: steppers) {
stepper.direction(CCW);
stepper.turn(0.5);
}
pos -= 0.5;
while (anyRunning()) {
loopClock::tick();
for (auto& ctl : stepper_ctl) {
ctl.run();
}
yield();
}

delay(2000);
loopClock::tick();
for (auto& stepper: steppers) {
stepper.direction(CCW);
stepper.turn(0.75);
}
pos -= 0.75;
while (anyRunning()) {
loopClock::tick();
for (auto& ctl : stepper_ctl) {
ctl.run();
}
yield();
}

delay(2000);

loopClock::tick();

// set target for all steppers to 1 turn (360 degrees)


for (auto& stepper: steppers) {
stepper.direction(CW);
stepper.turn(0.75);
}
// run the stepper until target
while (anyRunning()) {
loopClock::tick();
for (auto& ctl : stepper_ctl) {
ctl.run();
}
yield();
}

delay(2000);

loopClock::tick();

// set target for all steppers to 1 turn (360 degrees)


for (auto& stepper: steppers) {
stepper.direction(CCW);
stepper.turn(0.25);
}
// run the stepper until target
while (anyRunning()) {
loopClock::tick();
for (auto& ctl : stepper_ctl) {
ctl.run();
}
yield();
}

delay(2000);

loopClock::tick();

// set target for all steppers to 1 turn (360 degrees)


for (auto& stepper: steppers) {
stepper.direction(CCW);
stepper.turn(0.75);
}
// run the stepper until target
while (anyRunning()) {
loopClock::tick();
for (auto& ctl : stepper_ctl) {
ctl.run();
}
yield();
}

delay(2000);

loopClock::tick();

// set target for all steppers to 1 turn (360 degrees)


for (auto& stepper: steppers) {
stepper.direction(CW);
stepper.turn(1.0);
}
// run the stepper until target
while (anyRunning()) {
loopClock::tick();
for (auto& ctl : stepper_ctl) {
ctl.run();
}
yield();
}

delay(2000);

loopClock::tick();

// set target for all steppers to 1 turn (360 degrees)


for (auto& stepper: steppers) {
stepper.direction(CCW);
stepper.turn(0.25);
}
// run the stepper until target
while (anyRunning()) {
loopClock::tick();
for (auto& ctl : stepper_ctl) {
ctl.run();
}
yield();
}

delay(2000);

loopClock::tick();

// set target for all steppers to 1 turn (360 degrees)


for (auto& stepper: steppers) {
stepper.direction(CW);
stepper.turn(1.0);
}
// run the stepper until target
while (anyRunning()) {
loopClock::tick();
for (auto& ctl : stepper_ctl) {
ctl.run();
}
yield();
}
delay(2000);

loopClock::tick();

// set target for all steppers to 1 turn (360 degrees)


for (auto& stepper: steppers) {
stepper.direction(CCW);
stepper.turn(0.5);
}
// run the stepper until target
while (anyRunning()) {
loopClock::tick();
for (auto& ctl : stepper_ctl) {
ctl.run();
}
yield();
}

delay(2000);

loopClock::tick();
// set target for all steppers to 1 turn (360 degrees)
for (auto& stepper: steppers) {
stepper.direction(CW);
stepper.turn(0.25);
}
// run the stepper until target
while (anyRunning()) {
loopClock::tick();
for (auto& ctl : stepper_ctl) {
ctl.run();
}
yield();
}
delay(2000);

You might also like