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);
}