#include <Arduino.h>
// Motor pin definitions
#define SLEEP_Y 11
#define DIR_Y 13
#define STEP_Y 14
#define SLEEP_X 10
#define DIR_X 12
#define STEP_X 15
// Joystick pin definitions
#define JOYSTICK_X 28
#define JOYSTICK_Y 27
// Speed control potentiometer
#define SPEED_CONTROL 26
// Dead zone definition
#define DEAD_ZONE 50 // Adjust this value based on your joystick's sensitivity
void setup() {
Serial.begin(115200);
// Motor pins setup
pinMode(SLEEP_Y, OUTPUT);
pinMode(DIR_Y, OUTPUT);
pinMode(STEP_Y, OUTPUT);
pinMode(SLEEP_X, OUTPUT);
pinMode(DIR_X, OUTPUT);
pinMode(STEP_X, OUTPUT);
// Enable drivers
digitalWrite(SLEEP_Y, HIGH);
digitalWrite(SLEEP_X, HIGH);
}
void loop() {
// Read joystick values and center at 0
int joystickX = analogRead(JOYSTICK_X) - 512;
int joystickY = analogRead(JOYSTICK_Y) - 512;
// Apply dead zone
if (abs(joystickX) < DEAD_ZONE) joystickX = 0;
if (abs(joystickY) < DEAD_ZONE) joystickY = 0;
// Separate motor control logic for each axis
if (joystickX != 0) { // X-axis movement
bool dirX = joystickX > 0;
digitalWrite(DIR_X, dirX);
performMotorStep(STEP_X);
} else {
// Stop X-axis motor if in dead zone
digitalWrite(STEP_X, LOW);
}
if (joystickY != 0) { // Y-axis movement
bool dirY = joystickY > 0;
digitalWrite(DIR_Y, dirY);
performMotorStep(STEP_Y);
} else {
// Stop Y-axis motor if in dead zone
digitalWrite(STEP_Y, LOW);
}
}
void performMotorStep(int stepPin) {
// Read speed control potentiometer
int speedValue = analogRead(SPEED_CONTROL);
int delayTime = map(speedValue, 0, 1023, 1000, 100); // Faster speed = lower delay
// Perform motor step
digitalWrite(stepPin, HIGH);
delayMicroseconds(delayTime);
digitalWrite(stepPin, LOW);
delayMicroseconds(delayTime);
}