Topic: Проблема с сервоприводом MG945 ESP32
//////////////////////////////////////////////
// RemoteXY include library //
//////////////////////////////////////////////
volatile bool buttonPressed = false;
// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__WIFI_POINT
#include <WiFi.h>
#include <ESP32Servo.h>
Servo myservo;
// настройки соединения
#define REMOTEXY_WIFI_SSID "HummerBot1"
#define REMOTEXY_WIFI_PASSWORD "HummerBot1"
#define REMOTEXY_SERVER_PORT 6377
#include <RemoteXY.h>
// конфигурация интерфейса RemoteXY
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] = // 45 bytes
{ 255, 3, 0, 0, 0, 38, 0, 17, 0, 0, 0, 31, 1, 200, 84, 1, 1, 2, 0, 5,
19, 10, 60, 60, 32, 16, 28, 31, 1, 140, 27, 24, 24, 1, 16, 1, 208, 163, 208, 180,
208, 176, 209, 128, 0 };
// структура определяет все переменные и события вашего интерфейса управления
struct {
// input variables
int8_t stick_x; // oт -100 до 100
int8_t stick_y; // oт -100 до 100
uint8_t hummer; // =1 если кнопка нажата, иначе =0
// other variable
uint8_t connect_flag; // =1 if wire connected, else =0
} RemoteXY;
#pragma pack(pop)
/////////////////////////////////////////////
// END RemoteXY include //
/////////////////////////////////////////////
#define LED 27
#define BTN 23
int servoPin = 18;
int ADC_Max = 4096;
/* определяем пины управления правым мотором */
#define RIGHT_UP 32
#define RIGHT_DN 33
#define PIN_MOTOR_RIGHT_SPEED 10
/* определяем пины управления левым мотором */
#define LEFT_UP 26
#define LEFT_DN 25
#define PIN_MOTOR_LEFT_SPEED 10
/* определяем два массива с перечислением пинов для каждого мотора */
unsigned char RightMotor[3] = { RIGHT_UP, RIGHT_DN, PIN_MOTOR_RIGHT_SPEED };
unsigned char LeftMotor[3] = { LEFT_UP, LEFT_DN, PIN_MOTOR_LEFT_SPEED };
/*
управление скоростью мотора
motor - ссылка на массив пинов
v - скорость мотора, может принимать значения от -100 до 100
*/
void Wheel(unsigned char* motor, int v) {
if (v > 100) v = 100;
if (v < -100) v = -100;
if (v > 0) {
digitalWrite(motor[0], HIGH);
digitalWrite(motor[1], LOW);
analogWrite(motor[2], v * 2.55);
} else if (v < 0) {
digitalWrite(motor[0], LOW);
digitalWrite(motor[1], HIGH);
analogWrite(motor[2], (-v) * 2.55);
} else {
digitalWrite(motor[0], LOW);
digitalWrite(motor[1], LOW);
analogWrite(motor[2], 0);
}
}
void setup() {
Serial.begin(115200);
ESP32PWM::allocateTimer(0);
ESP32PWM::allocateTimer(1);
ESP32PWM::allocateTimer(2);
ESP32PWM::allocateTimer(3);
myservo.setPeriodHertz(50);// Standard 50hz servo
myservo.attach(servoPin, 1000, 2000); //MG945
/* инициализация пинов */
pinMode(RIGHT_UP, OUTPUT);
pinMode(RIGHT_DN, OUTPUT);
pinMode(LEFT_UP, OUTPUT);
pinMode(LEFT_DN, OUTPUT);
pinMode(BTN, INPUT_PULLUP);
pinMode(LED, OUTPUT);
attachInterrupt(digitalPinToInterrupt(BTN), handleButtonPress, CHANGE);
/* инициализация модуля RemoteXY */
RemoteXY_Init();
}
void loop() {
/* обработчик событий модуля RemoteXY */
RemoteXY_Handler();
if(RemoteXY.hummer == 1){
Serial.println("Серво запускается...");
myservo.write(0);
RemoteXY_delay(1000);
Serial.println("Серво Выключается...");
myservo.write(180);
RemoteXY_delay(1000);
}
if (buttonPressed) {
digitalWrite(LED, HIGH);
RemoteXY_delay(5000);
digitalWrite(LED, LOW);
buttonPressed = false;
}
Wheel(RightMotor, RemoteXY.stick_y - RemoteXY.stick_x);
Wheel(LeftMotor, RemoteXY.stick_y + RemoteXY.stick_x);
}
void handleButtonPress() {
buttonPressed = true; // Устанавливаем флаг нажатия кнопки в true
}
Моторы двигаются а сервопривод нет.
Я загружаю нажимаю на кнопку serial принт выводит что серва вкл после выкл но при этом никаких действий что делать помогите второй день решаю??