#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);
}
z up
z down
table lock
x
y
z
x
y
x left
x right
poti speed