Modification de la voiture « Lego » Fiat 500 de chez Clementoni – Partie 2

Au final, je n’ai pas trouvé pratique le fait d’utiliser le téléphone comme télécommande.
J’ai voulu utilisé une manette PS4 car cela me parait plus fonctionnel.
De plus j’ai changé le driver moteur par un L9110S car j’avais cela en stock et que c’est eptit en taille :), le reste toujours un ESP32 D1 Mini et un servo moteur 9G Metal.
Voila mon code final.

#include <ESP32Servo.h>
#include <PS4Controller.h>

// Pin definitions
const int motorPin1 = 18; // Motor control pin 1
const int motorPin2 = 19; // Motor control pin 2
const int servoPin = 2;   // Servo control pin

// Create a servo object
Servo myServo;

// Define servo positions
const int SERVO_CENTER = 90; // Neutral position
const int SERVO_RIGHT = 180; // Full right position
const int SERVO_LEFT = 0;    // Full left position

// Variables for PS4 controller
int RStickX = 0;
bool L2 = false;
bool R2 = false;

void setup() {
  // Initialize motor pins
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);

  // Initialize servo
  myServo.attach(servoPin);
  myServo.write(SERVO_CENTER); // Start with wheels centered
  
  // Start serial communication for debugging
  Serial.begin(115200);
  
  // Initialize PS4 Controller
  PS4.begin("c0:49:ef:cf:03:1b"); // Remplacez par votre adresse MAC
  
  Serial.println("Prêt.");
}

void loop() {
  // Check if PS4 controller is connected
  if (PS4.isConnected()) {
    // Read the analog stick values
    RStickX = PS4.RStickX(); // Read the right stick X-axis value
    
    // Map right stick X-axis values to servo positions (invert directions)
    int servoPosition = map(RStickX, -128, 127, SERVO_RIGHT, SERVO_LEFT);
    myServo.write(servoPosition);

    // Read button states
    L2 = PS4.L2();
    R2 = PS4.R2();

    // Control the motor based on button states
    if (L2) {
      moveBackward();
    } else if (R2) {
      moveForward();
    } else {
      stopMotor();
    }
    
    // Debugging: Print button and analog stick values
    Serial.print("Right Stick X: ");
    Serial.print(RStickX);
    Serial.print(" | Servo Position: ");
    Serial.print(servoPosition);
    Serial.print(" | L2: ");
    Serial.print(L2);
    Serial.print(" | R2: ");
    Serial.println(R2);
  }
  
  // Add a small delay to avoid flooding the serial output
  delay(10);
}

void moveForward() {
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
}

void moveBackward() {
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
}

void stopMotor() {
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
}