#include <Servo.h>
#include <Stepper.h>

#define STEPS_PER_REVOLUTION 200 // количество шагов на оборот двигателя
#define STEP_PIN 7 // пин шага на драйвере двигателя подключен к пину 3 на плате Arduino
#define DIR_PIN 8 // пин направления на драйвере двигателя подключен к пину 2 на плате Arduino
#define ENABLE_PIN 6 // пин включения на драйвере двигателя подключен к пину 4 на плате Arduino
#define POT_PIN A2 // пин потенциометра подключен к пину A0 на плате Arduino

Stepper motor(STEPS_PER_REVOLUTION, STEP_PIN, DIR_PIN);


Servo servo1;
Servo servo2;

int xPin = A0;
int yPin = A1;

int xValue;
int yValue;

int servoPin1 = 9;
int servoPin2 = 10;
int servoAngle1 = 90;
int servoAngle2 = 90;
int lastServoAngle1 = 90;
int lastServoAngle2 = 90;

void setup() {
servo1.attach(servoPin1);
servo2.attach(servoPin2);
Serial.begin(9600);
pinMode(ENABLE_PIN, OUTPUT); // устанавливаем пин включения на драйвере двигателя в качестве выхода
digitalWrite(ENABLE_PIN, HIGH); 
}

void loop() {
int pot_val = analogRead(POT_PIN); // считываем значение потенциометра
  Serial.print("Potentiometer value: ");
  Serial.println(pot_val); // выводим значение потенциометра в Serial Monitor
  if (pot_val < 490) { // если потенциометр повернут влево, то двигатель должен вращаться влево
    motor.setSpeed(map(pot_val, 0, 490, 0, 255)); // устанавливаем скорость двигателя в диапазоне от 0 до 255
    motor.step(-1); // шагаем влево
    Serial.println("Motor turned left"); // выводим сообщение в Serial Monitor о том, что двигатель вращается влево
  } else if (pot_val > 530) { // если потенциометр повернут вправо, то двигатель должен вращаться вправо
    motor.setSpeed(map(pot_val, 1023, 530, 0, 255)); // устанавливаем скорость двигателя в диапазоне от 0 до 255
    motor.step(1); // шагаем вправо
    Serial.println("Motor turned right"); // выводим сообщение в Serial Monitor о том, что двигатель вращается вправо
  } else { // если потенциометр не двигается, двигатель не крутится
    motor.setSpeed(0); // устанавливаем скорость двигателя равной 0
    Serial.println("Motor stopped"); // выводим сообщение в Serial Monitor о том, что двигатель остановлен
  }
  delay(100); // задержка для стабилизации
xValue = analogRead(xPin);
yValue = analogRead(yPin);

if (xValue != 512) {
servoAngle1 = map(xValue, 0, 1023, 0, 180);
if (xValue > 522 || xValue < 502) {
servoAngle1 = lastServoAngle1 + (xValue - 512) / 256;
if (servoAngle1 > 180) {
servoAngle1 = 180;
}
else if (servoAngle1 < 0) {
servoAngle1 = 0;
}
lastServoAngle1 = servoAngle1;
}
}
else {
servoAngle1 = lastServoAngle1;
}

if (yValue != 512) {
servoAngle2 = map(yValue, 0, 1023, 0, 180);
if (yValue > 522 || yValue < 502) {
servoAngle2 = lastServoAngle2 + (yValue - 512) / 256;
if (servoAngle2 > 180) {
servoAngle2 = 180;
}
else if (servoAngle2 < 0) {
servoAngle2 = 0;
}
lastServoAngle2 = servoAngle2;
}
}
else {
servoAngle2 = lastServoAngle2;
}

servo1.write(servoAngle1);
servo2.write(servoAngle2);

Serial.print("X = ");
Serial.print(xValue);
Serial.print("\tY = ");
Serial.print(yValue);
Serial.print("\tServo 1 angle = ");
Serial.print(servoAngle1);
Serial.print("\tServo 2 angle = ");
Serial.println(servoAngle2);

delay(10);
}

A4988