Mando Ps4 R2 y L2

Hola buenas, estoy haciendo un proyecto para el instituto sobre un coche teledirigido y me está costando esta parte:
Tengo un motor Dc TT, ya he encargado el Drive de controlador por PWM, mi idea es hace que R2 sea el acelerador y L2 el frenado y que R2-L2=Velocidad, pero no logro hacerlo, le he pedido incluso al Chatgpt que me haga algo pero sigo con lo mismo. La manera de comprobar a parte del serial es porque he instalado unas leds rojas que hacen de luces de freno, y no se encienden al frenar ni nada, si alguien sabe como hacerlo se lo agredeceria muchísimo.

La placa es una ESP32 SteamMakers por si sirve de algo.

Explique qué es R2, qué es L2 (¿botones de PS4?), muestre un diagrama de cableado de su proyecto para incluir todos los dispositivos que está utilizando, y también muestre el boceto/programa que escribió.

R2 y L2 en los mandos de Ps4 son gatillos analógicos


Este es el codigo:

int PinMotorA;
int PinMotorB;
int Valor_R2 = map(PS4.R2(), 0, 255, 0, 100);  // Mapea de 0-255 a 0-100
int Valor_L2 = map(PS4.L2(), 0, 255, 0, 100);  // Mapea de 0-255 a 0-100
int Velocidad = Valor_R2 - Valor_L2;  // Resta mapeada
// Variables para intermitentes
unsigned long previousMillisLeft = 0;
unsigned long previousMillisRight = 0;
const long interval = 500;  // Intervalo de 500 ms para el parpadeo
bool leftState = false;
bool rightState = false;

void setup() {
    // Iniciar comunicación con el controlador PS4
    PS4.begin();  // Dirección MAC del ESP32  
    myServo.attach(servoPin);
    myServo.write(servoPos);
    pinMode (motorPin, OUTPUT);
    pinMode (pinMotorA, OUTPUT);
    pinMode (pinMotorB, OUTPUT);
    pinMode(Luces_freno, OUTPUT);
    pinMode(ZumbadorPin, OUTPUT);
    pinMode(LED_INTERMITENTE_L_Pin, OUTPUT);
    pinMode(LED_INTERMITENTE_R_Pin, OUTPUT);
    pinMode(LED_LUCES_Pin, OUTPUT);

    Serial.begin(115200);
}

void loop() {
    if (PS4.isConnected()) {
        Serial.print("Valor_R2: ");
        Serial.print(PS4.R2());
        Serial.print(PS4.L2());
        Serial.println(Valor_R2);
        Serial.print("Valor_L2: ");
        Serial.println(Valor_L2);
        Serial.print("Velocidad: ");
        Serial.println(Velocidad);

        if (Velocidad < 0) {
            digitalWrite(Luces_freno, HIGH);  // Encender LED si está frenando (Velocidad negativa)
        } else {
            digitalWrite(Luces_freno, LOW);  // Apagar LED si no está frenando
        }

        // Control del motor
        if (Velocidad > 0) { 
            PS4.setRumble(Valor_L2, Valor_R2);  
            digitalWrite(pinMotorA, LOW);
            digitalWrite(pinMotorB, HIGH);
            analogWrite(motorPin, Velocidad);  
        }
        else if (Velocidad < 0) {
            PS4.setRumble(Valor_L2, Valor_R2);
            digitalWrite(pinMotorA, HIGH);
            digitalWrite(pinMotorB, LOW);
            analogWrite(motorPin, -Velocidad);  
        }
        else {  
            digitalWrite(pinMotorA, LOW);
            digitalWrite(pinMotorB, LOW);
            analogWrite(motorPin, 0);
        }
              // Control del servo motor con el eje Y del joystick izquierdo
        int servoY = PS4.LStickY();
        servoPos = map(servoY, -128, 127, 0, 180);
        myServo.write(servoPos);

        // Alternar luces al presionar el botón "Up"
        bool lucesState = PS4.Up();
        if (lucesState && !lucesPreviousState) {
            lucesPressed = !lucesPressed;  // Alternar el estado de las luces
            Serial.println("Luces alternadas");
        }
        lucesPreviousState = lucesState;

        if (lucesPressed) {
            digitalWrite(LED_LUCES_Pin, HIGH);  // Encender luces
        } else {
            digitalWrite(LED_LUCES_Pin, LOW);    // Apagar luces
        }
        // Intermitente izquierdo (Left)
        bool leftStatePS4 = PS4.Left();
        if (leftStatePS4 && !leftPreviousState) {
            leftPressed = !leftPressed;  // Alternar el estado del intermitente izquierdo
            Serial.println("Intermitente izquierdo alternado");
        }
        leftPreviousState = leftStatePS4;

        // Intermitente derecho (Right)
        bool rightStatePS4 = PS4.Right();
        if (rightStatePS4 && !rightPreviousState) {
            rightPressed = !rightPressed;  // Alternar el estado del intermitente derecho
            Serial.println("Intermitente derecho alternado");
        }
        rightPreviousState = rightStatePS4;

        // Control del parpadeo de los intermitentes y el sonido del zumbador
        unsigned long currentMillis = millis();

        // Intermitente izquierdo con sonido
        if (leftPressed) {
            if (currentMillis - previousMillisLeft >= interval) {
                previousMillisLeft = currentMillis;
                leftState = !leftState;  // Cambiar el estado del LED
                digitalWrite(ZumbadorPin, HIGH);  // Hacer un sonido mientras parpadea
                digitalWrite(LED_INTERMITENTE_L_Pin, leftState ? HIGH : LOW);
            }
        } else {
            digitalWrite(LED_INTERMITENTE_L_Pin, LOW);  // Apagar el LED izquierdo
        }

        // Intermitente derecho con sonido
        if (rightPressed) {
            if (currentMillis - previousMillisRight >= interval) {
                previousMillisRight = currentMillis;
                rightState = !rightState;  // Cambiar el estado del LED
                digitalWrite(LED_INTERMITENTE_R_Pin, rightState ? HIGH : LOW);
                digitalWrite(ZumbadorPin, HIGH);
            }
        } else {
            digitalWrite(LED_INTERMITENTE_R_Pin, LOW);  // Apagar el LED derecho
        }
    }
}

Y este el cableado:


Muchas gracias por contestarme.

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @adria22 .

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Moderador:
Por favor, lee las Normas del foro y publica/edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado/editado, lo cortas y click en (<CODE/>)



Que mando estas usando un Sony o un Clon?

Un mando Sony, perdón por ponerlo de esa manera, lo he escrito esta mañana con prisas.

Al código le falta la librería.
Además debes aparear el control con el ESP32 diciéndole la dirección MAC que este tiene
Para eso debes leerla con un programa que se llama SixaxisPairTool ahora te digo donde lo consigues.
Acá en este hilo respondí todo lo que necesitas

Ya he soluciando el problema, muchas gracias por intentar ayudarme, dejo aqui el codigo que he usado para la gente interesada ( se necesita un chip L298N para controlar el motor )

void loop() {
    if (PS4.isConnected()) {
        Valor_R2 = (PS4.R2Value());  
        Valor_L2 = (PS4.L2Value());
        Velocidad = Valor_R2 - Valor_L2;
        Serial.print("Valor_R2: ");
        Serial.println(Valor_R2);
        Serial.print("Valor_L2: ");
        Serial.println(Valor_L2);
        Serial.print("Velocidad: ");
        Serial.println(Velocidad);
        aceleracion = Velocidad - antVelocidad;
        Serial.print("aceleracion: ");
        Serial.println(aceleracion);
        antVelocidad = Velocidad;

        if (aceleracion < 0 && Velocidad >= 0) {
            digitalWrite(Luces_freno, HIGH);  // Encender LED si está frenando
        } else {
            digitalWrite(Luces_freno, LOW);  // Apagar LED si no está frenando
        }

        // Control del motor
        if (Velocidad > 0) { 
            PS4.setRumble(Valor_L2, Valor_R2);  
            digitalWrite(pinMotorA, LOW);
            digitalWrite(pinMotorB, HIGH);
            analogWrite(motorPin, Velocidad);  
        }
        else if (Velocidad < 0) {
            PS4.setRumble(Valor_L2, Valor_R2);
            digitalWrite(pinMotorA, HIGH);
            digitalWrite(pinMotorB, LOW);
            analogWrite(motorPin, -Velocidad);  
        }
        else {  
            digitalWrite(pinMotorA, LOW);
            digitalWrite(pinMotorB, LOW);
            analogWrite(motorPin, 0);
        }

A ver.. el L298 esta claro pero tu problema era de apareamiento si mal entendí.