#include <ESP32Servo.h>
const int dirPin = 0;
const int stepPin = 2;
Servo servo1;
const int joyVert = 35;
const int joyHorz = 32;
const int stepDelay = 4000; // НУЖНА РУЧНАЯ КАЛИБРОВКА (мс м/у шагами мотора)
const int servoStepDelay = 4000; // НУЖНА РУЧНАЯ КАЛИБРОВКА (мс м/у шагами серво)
const int STEPS_FULL = 200; // ЗАВИСИТ ОТ КОНКРЕТНОГО МОТОРА
int servPos = 90; // НАЧАЛЬНОЕ ПОЛОЖЕНИЕ СЕРВОПРИВОДА
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(joyVert, INPUT);
pinMode(joyHorz, INPUT);
servo1.attach(33);
servo1.write(servPos); // СБРОС ПОЛОЖЕНИЯ СЕРВОПРИВОДА
}
void MoveMotor(int posVert){
if (posVert > 2048){ // ДЖОЙСТИК ВВЕРХ
digitalWrite(dirPin, LOW); // НАПРАВЛЕНИЕ МОТОРА ПРОТИВ ЧАСОВОЙ
digitalWrite(stepPin, HIGH);
delayMicroseconds(stepDelay);
digitalWrite(stepPin, LOW);
delayMicroseconds(stepDelay);
}
else if (posVert < 2048){ // ДЖОЙСТИК ВНИЗ
digitalWrite(dirPin, HIGH); // НАПРАВЛЕНИЕ МОТОРА ПО ЧАСОВОЙ
digitalWrite(stepPin, HIGH);
delayMicroseconds(stepDelay);
digitalWrite(stepPin, LOW);
delayMicroseconds(stepDelay);
}
}
void MoveServo(int posHorz){
if ((posHorz > 2048)&&(servPos<180)){ // ДЖОЙСТИК ВПРАВО
servPos--; // СЕРВО ПО ЧАСОВОЙ
servo1.write(servPos);
delayMicroseconds(stepDelay);
}
else if ((posHorz < 2048)&&(servPos>0)){ // ДЖОЙСТИК ВЛЕВО
servPos++; // СЕРВО ПРОТИВ ЧАСОВОЙ
servo1.write(servPos);
delayMicroseconds(stepDelay);
}
}
void loop() {
int joyPosVert = analogRead(joyVert);
int joyPosHorz = analogRead(joyHorz);
MoveMotor(joyPosVert);
MoveServo(joyPosHorz);
}