Skocz do zawartości

Problem serwo porusza się z silnikiem esp32


Pomocna odpowiedź

Napisano

Podczas sterowania prawym joystickiem porusza się serwo oraz silnik minimalnie , gdzie powinien tylko silnik. Sterowanie samym serwem poprzez prawy joystick działa poprawnie.https://files.fm/f/qnq7xbb3ue filmik 
 

#include <Bluepad32.h>
#include <ESP32Servo.h> 

#define IN1 25
#define IN2 26
#define PWMA 27
#define STANDBY 18

#define SERVO_PIN 19   

#define PWM_CH_MOTOR 0
#define PWM_FREQ 20000
#define PWM_RES 8

ControllerPtr myControllers[BP32_MAX_GAMEPADS];

Servo myServo;

void onConnectedController(ControllerPtr ctl) {
    for (int i = 0; i < BP32_MAX_GAMEPADS; i++) {
        if (myControllers[i] == nullptr) {
            myControllers[i] = ctl;
            Serial.printf("Controller connected, index=%d\n", i);
            ControllerProperties properties = ctl->getProperties();
            Serial.printf("Controller model: %s, VID=0x%04x, PID=0x%04x\n",
                          ctl->getModelName().c_str(),
                          properties.vendor_id, properties.product_id);
            break;
        }
    }
}

void onDisconnectedController(ControllerPtr ctl) {
    for (int i = 0; i < BP32_MAX_GAMEPADS; i++) {
        if (myControllers[i] == ctl) {
            myControllers[i] = nullptr;
            Serial.printf("Controller disconnected, index=%d\n", i);
            break;
        }
    }
}

void processGamepad(ControllerPtr ctl) {
    int y = ctl->axisY();
    int speed = map(abs(y), 0, 512, 0, 255);

    if (y < -30) {                 
        digitalWrite(IN1, HIGH);
        digitalWrite(IN2, LOW);
        ledcWrite(PWM_CH_MOTOR, speed);
    } else if (y > 30) {             
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, HIGH);
        ledcWrite(PWM_CH_MOTOR, speed);
    } else {                         
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, LOW);
        ledcWrite(PWM_CH_MOTOR, 0);
    }

    int rx = ctl->axisRX();
    int servoAngle = map(rx, -512, 512, 0, 180); 
    myServo.write(servoAngle);
}

void setup() {
    Serial.begin(115200);

    // Piny silnika
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(STANDBY, OUTPUT);
    digitalWrite(STANDBY, HIGH);

    // PWM silnika
    ledcSetup(PWM_CH_MOTOR, PWM_FREQ, PWM_RES);
    ledcAttachPin(PWMA, PWM_CH_MOTOR);
    ledcWrite(PWM_CH_MOTOR, 0);

    // Serwo
    myServo.attach(SERVO_PIN);

    // Bluepad32
    BP32.setup(&onConnectedController, &onDisconnectedController);
    BP32.enableVirtualDevice(false);
    BP32.forgetBluetoothKeys();
}

void loop() {
    BP32.update();
    for (int i = 0; i < BP32_MAX_GAMEPADS; i++) {
        if (myControllers[i] && myControllers[i]->isConnected()) {
            processGamepad(myControllers[i]);
        }
    }
}

 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...