/*
#include <AccelStepper.h>
// change pins to match your setup. enable pin just for my CNC shield
const byte stepPin = 9;
const byte dirPin = 8;
//const byte enablePin = 12; // for CNC shield
const byte potPin = A0;
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);
void setup()
{
Serial.begin(115200);
//pinMode(enablePin, OUTPUT); // for CNC shield
//digitalWrite(enablePin, LOW); // enable stepper(s)
stepper.setMaxSpeed(50000);
stepper.setAcceleration(10000);
stepper.setSpeed(0);
}
void loop()
{
int potValue = analogRead(potPin);
stepper.runToNewPosition(map(potValue, 0 ,1023, -1000, 1000));
//stepper.runSpeed();
}
*/
#include <AccelStepper.h>
// Pin Definition
#define stepPin 9
#define dirPin 8
#define enablePin 5
// Motor Steps per Revolution (1.8 degrees per step)
#define STEPS_PER_REVOLUTION 3200
// Create an instance of AccelStepper
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);
void setup() {
// Set the enable pin as output and enable the motor
pinMode(enablePin, OUTPUT);
digitalWrite(enablePin, LOW); // LOW to enable the motor
// Set maximum speed and acceleration
stepper.setMaxSpeed(1000);
stepper.setAcceleration(100);
// Initialize serial communication
Serial.begin(9600);
Serial.println("Enter commands in the format: ACC:XXX, SPD:XXX, POS:XXX, STP:XXX");
}
void loop() {
if (Serial.available() > 0) {
String input = Serial.readStringUntil('\n');
input.trim(); // Remove any extra whitespace or newline characters
if (input.startsWith("ACC:")) {
int acceleration = input.substring(4).toInt();
stepper.setAcceleration(acceleration);
Serial.print("Acceleration set to: ");
Serial.println(acceleration);
}
else if (input.startsWith("SPD:")) {
int speed = input.substring(4).toInt();
stepper.setMaxSpeed(speed);
Serial.print("Speed set to: ");
Serial.println(speed);
}
else if (input.startsWith("POS:")) {
int positionDegrees = input.substring(4).toInt();
int targetPosition = (positionDegrees * STEPS_PER_REVOLUTION) / 360; // Convert degrees to steps
stepper.moveTo(targetPosition);
Serial.print("Moving to position: ");
Serial.print(positionDegrees);
Serial.println(" degrees");
}
else if (input.startsWith("STP:")) {
int steps = input.substring(4).toInt();
stepper.move(steps);
Serial.print("Moving by steps: ");
Serial.println(steps);
}
else {
Serial.println("Invalid command. Use ACC:XXX, SPD:XXX, POS:XXX, STP:XXX");
}
}
stepper.run(); // Non-blocking motor control
}