#include "AccelStepper.h"

// Define a stepper and the pins it will use
AccelStepper stepper(AccelStepper::FULL4WIRE, 2, 3, 4, 5);

// This defines the analog input pin for reading the control voltage
// Tested with a 10k linear pot between 5v and GND
#define ANALOG_IN A0

// Define a scaling factor to convert analog input range to suitable range for stepper
#define SCALING_FACTOR 5

void setup() {  
  stepper.setMaxSpeed(1000);
  stepper.setAcceleration(500); // Adding acceleration to smooth stepper motor operation
}

void loop() {
  // Read new position
  int analog_in = analogRead(ANALOG_IN);

  // Convert analog input to a suitable range for stepper
  long newPosition = analog_in * SCALING_FACTOR;

  stepper.moveTo(newPosition);
  // No need to setSpeed here as moveTo manages the speed automatically

  // Run the motor to the new position
  while (stepper.distanceToGo() != 0) {
    stepper.run();
  }
}
ScopeBreakout