#include <AccelStepper.h>
#define vertical A0
#define horizontal A1
#define poti A2
#define x_left A4
#define x_right A5
#define x_step 2
#define x_dir 3
#define y_step 4
#define y_dir 5
#define z_step 6
#define z_dir 7
#define table_lock 8
#define z_up 9
#define z_down 10
AccelStepper stepper_x(AccelStepper::DRIVER, x_step, x_dir);
AccelStepper stepper_y(AccelStepper::DRIVER, y_step, y_dir);
AccelStepper stepper_z(AccelStepper::DRIVER, z_step, z_dir);
int x_speed = 1000;
int y_speed = 1000;
int z_speed = 1000;
int x_accel = 250;
int y_accel = 250;
int z_accel = 250;
int lockdelay = 500;
int unlockdelay = 500;

void setup()
{
  //Serial.begin(9600);
  pinMode(vertical, INPUT);
  pinMode(horizontal, INPUT);
  pinMode(z_up, INPUT_PULLUP);
  pinMode(z_down, INPUT_PULLUP);
  pinMode(table_lock, OUTPUT);
  digitalWrite(table_lock, HIGH);
  pinMode(x_step, OUTPUT);
  digitalWrite(x_step, LOW);
  pinMode(x_dir, OUTPUT);
  digitalWrite(x_dir, LOW);
  pinMode(y_step, OUTPUT); 
  digitalWrite(y_step, LOW);
  pinMode(y_dir, OUTPUT);
  digitalWrite(y_dir, LOW);
  pinMode(z_step, OUTPUT);
  digitalWrite(z_step, LOW);
  pinMode(z_dir, OUTPUT);
  digitalWrite(z_dir, LOW);
  pinMode(x_left, INPUT_PULLUP);
  pinMode(x_right, INPUT_PULLUP);

  stepper_x.setMaxSpeed(x_speed);
  stepper_x.setAcceleration(x_accel);
  stepper_y.setMaxSpeed(y_speed);
  stepper_y.setAcceleration(y_accel);
  stepper_z.setMaxSpeed(z_speed);
  stepper_z.setAcceleration(z_accel);

  delay(lockdelay);

}

void loop()
{
  stepper_z.setCurrentPosition(0);
  digitalWrite(table_lock, HIGH);
  int y_axis = map(analogRead(vertical), 0, 1023, -x_speed, x_speed); // vertical goes from 0 (bottom) to 1023 (top), 512 in middle
  int x_axis = map(analogRead(horizontal), 0, 1023, -y_speed, y_speed); // horizontal goes from 0 (right) to 1023 (left),512 in middle
  int potispeed = map(analogRead(poti), 0, 1023, 0, x_speed);

  stepper_y.setSpeed(y_axis);
  stepper_y.run();
  
  if (digitalRead(z_up) == LOW)
  {
    digitalWrite(table_lock, LOW);
    delay(unlockdelay);
    while (digitalRead(z_up) == LOW)
    {
      stepper_z.move(10000);
      stepper_z.run();
    }
    delay(lockdelay);
  }
  
  if (digitalRead(z_down) == LOW)
  {
    digitalWrite(table_lock, LOW);
    delay(unlockdelay);
    while (digitalRead(z_down) == LOW)
    {
      stepper_z.move(-10000);
      stepper_z.run();
    }
    delay(lockdelay);
  }
  
  if(digitalRead(x_left) == LOW)
  {
    stepper_x.setSpeed(potispeed);
    stepper_x.move(10000);
    stepper_x.run();
  }
  else if(digitalRead(x_right) == LOW)
  {
    stepper_x.setSpeed(-potispeed);
    stepper_x.move(10000);
    stepper_x.run();
  }
  else
  {
    stepper_x.setSpeed(x_axis);
    stepper_x.run();
  }
  //Serial.println(potispeed);
}
A4988
A4988
A4988
NOCOMNCVCCGNDINLED1PWRRelay Module
z up
z down
table lock
x
y
z
x
y
x left
x right
poti speed