// Capteurs const int ldrDroitePin = A2; // Photorésistance Droite const int ldrMilieuPin = A1; const int ldrGauchePin = A0; // Photorésistance Gauche // Moteur gauche const int IN1 = 3; const int IN2 = 6; const int ENA = 5; // Moteur droit const int IN3 = 9; const int IN4 = 10; const int ENB = 11; // Seuil de détection const int seuilLigne = 960; // État précédent enum DernierCapteur { AUCUN, GAUCHE, DROITE }; DernierCapteur dernierActif = AUCUN; void setup() { Serial.begin(9600); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); avancer(); } void loop() { int valGauche = analogRead(ldrGauchePin); int valDroite = analogRead(ldrDroitePin); bool detectG = valGauche > seuilLigne; bool detectD = valDroite > seuilLigne; Serial.print("G: "); Serial.print(valGauche); Serial.print(" D: "); Serial.println(valDroite); if (detectG && detectD) { // Ligne au centre avancer(); analogWrite(ENA, 80); analogWrite(ENB, 80); dernierActif = AUCUN; } else if (detectG && !detectD) { // Virage à gauche avancer(); analogWrite(ENA, 40); analogWrite(ENB, 60); dernierActif = GAUCHE; } else if (!detectG && detectD) { // Virage à droite avancer(); analogWrite(ENA, 60); analogWrite(ENB, 40); dernierActif = DROITE; } else { // Virage serré if (dernierActif == GAUCHE) { tournerStatiqueGauche(); // Virage serré à Gauche } else if (dernierActif == DROITE) { tournerStatiqueDroite(); // Virage serré à Droite } else { // Aucune rotation : Arrêt analogWrite(ENA, 0); analogWrite(ENB, 0); } analogWrite(ENA, 50); analogWrite(ENB, 50); } delay(50); } // Avancer void avancer() { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); // gauche avant digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); // droite avant } // Tourner sur place vers la gauche void tournerStatiqueGauche() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); // gauche arrière digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); // droite avant } // Tourner sur place vers la droite void tournerStatiqueDroite() { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); // gauche avant digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); // droite arrière }