#include <AccelStepper.h>
#include <PID_v1.h>

AccelStepper stepper = AccelStepper(AccelStepper::DRIVER, 4, 7); // Assuming DRIVER type

double Setpoint;
double Input;
double Output;

// PID parameters
double Kp = 1, Ki = 0.1, Kd = 0.1; // Adjust these values based on your system

// Create PID instance
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

void setup() {
  Serial.begin(9600);
  Setpoint = 0; // set point value
  myPID.SetMode(AUTOMATIC);
  myPID.SetTunings(Kp, Ki, Kd);
  stepper.setMaxSpeed(5000);
  stepper.setAcceleration(100);
}

void loop() {
  if (Serial.available() > 0) {
    Input = Serial.parseFloat();
  }
  myPID.Compute();
  moveStepper(Output);
  Serial.print(Input);
  Serial.print(" ");
  Serial.println(Output);
  Serial.print(" ");
  Serial.println(Setpoint);
}

void moveStepper(double position) {
  //Serial.println("Moving stepper motor");
  stepper.moveTo(position);
  while (stepper.distanceToGo() != 0) {
    stepper.run();
  }
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
A4988
drv1:ENABLE
drv1:MS1
drv1:MS2
drv1:MS3
drv1:RESET
drv1:SLEEP
drv1:STEP
drv1:DIR
drv1:GND.1
drv1:VDD
drv1:1B
drv1:1A
drv1:2A
drv1:2B
drv1:GND.2
drv1:VMOT
stepper1:A-
stepper1:A+
stepper1:B+
stepper1:B-