Problème if else if

Bonjour à tous,
Je suis nouveau sur ce forum car je rencontre un problème de programmation des if else.
Mon projet étant de créer un robot éviteur d'objets (une tondeuse autonome en vérité).
Je dispose pour cela de 3 capteurs infrarouge (PIR) (capteur gauche, central et droite)
et d'une série de 9 leds pour les tests.
Dans le code joint, seules les conditions 1 et 2 fonctionnent (AVANCE NORMALE / CENTRE MASQUE).
Auriez-vous une solution afin que le reste des conditions fonctionnent également ?
Au plaisir de lire vos réponses,
Cordialement,
Denis.

#include "CytronMotorDriver.h"
CytronMD motor1(PWM_DIR, 2, 3); // moteur1 pin 2/3
CytronMD motor2(PWM_DIR, 4, 5); // moteur2 pin 3/4

int LED1 = 6;//VERT G 
int LED2 = 7;//ORANGE G  
int LED3 = 8;//ROUGE G 
int LED4 = 14;//VERT C
int LED5 = 15;//ORANGE C   
int LED6 = 16;//ROUGE C  
int LED7 = 18;//VERT D 
int LED8 = 19;//ORANGE D  
int LED9 = 20;//ROUGE D 
int centerPin = 24;  // This is our input pin for center
int center = LOW;    // HIGH MEANS NO OBSTACLE
int leftPin = 22;   // This is our input pin for left
int left = LOW;     // HIGH MEANS NO OBSTACLE
int rightPin = 26;  //This is our input pin for right
int right = LOW;    // HIGH MEANS NO OBSTACLE



  void setup() {
  //defini les entrees/sorties
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);
  pinMode(LED6, OUTPUT);
  pinMode(LED7, OUTPUT);
  pinMode(LED8, OUTPUT);
  pinMode(LED9, OUTPUT);
  pinMode(centerPin, INPUT);
  pinMode(leftPin, INPUT);
  pinMode(rightPin, INPUT);
  
 
  }
  void loop() {
  center = digitalRead(centerPin);
  left = digitalRead(leftPin);
  right = digitalRead(rightPin);
  if (center == HIGH || left == HIGH || right == HIGH) // CONDITION 1 AVANCE NORMALE 
  {
  digitalWrite(LED1, HIGH); 
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
  digitalWrite(LED4, HIGH);
  digitalWrite(LED5, LOW);
  digitalWrite(LED6, LOW);
  digitalWrite(LED7, HIGH);
  digitalWrite(LED8, LOW);
  digitalWrite(LED9, LOW);
  motor1.setSpeed(50);  
  motor2.setSpeed(50);  
  }
else if
  (digitalRead(centerPin == LOW)) // CONDITION 2 CENTRE MASQUE
  {
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
  digitalWrite(LED4, LOW);
  digitalWrite(LED5, LOW);
  digitalWrite(LED6, HIGH);
  digitalWrite(LED7, LOW);
  digitalWrite(LED8, LOW);
  digitalWrite(LED9, LOW);
  motor1.setSpeed(-50);  
  motor2.setSpeed(-50);  
  delay(4000);
  digitalWrite(LED2, HIGH);
  motor1.setSpeed(0);  
  motor2.setSpeed(50); // TOURNE GAUCHE
  delay(2000);
  }
else if
  (digitalRead(leftPin == LOW)) // CONDITION 3 GAUCHE MASQUE
  {
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, HIGH);
  digitalWrite(LED4, LOW);
  digitalWrite(LED5, LOW);
  digitalWrite(LED6, LOW);
  digitalWrite(LED7, LOW);
  digitalWrite(LED8, LOW);
  digitalWrite(LED9, LOW);
  motor1.setSpeed(-50);  
  motor2.setSpeed(-50);  
  delay(4000);
  digitalWrite(LED8, HIGH);
  motor1.setSpeed(50); // TOURNE DROITE 
  motor2.setSpeed(0); 
  delay(2000);
  }
  else if
  (digitalRead(rightPin == LOW)) // CONDITION 3 DROITE MASQUE
  {
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
  digitalWrite(LED4, LOW);
  digitalWrite(LED5, LOW);
  digitalWrite(LED6, LOW);
  digitalWrite(LED7, LOW);
  digitalWrite(LED8, LOW);
  digitalWrite(LED9, HIGH);
  motor1.setSpeed(-50);  
  motor2.setSpeed(-50);  
  delay(4000);
  digitalWrite(LED2, HIGH);
  motor1.setSpeed(0); // TOURNE GAUCHE
  motor2.setSpeed(50); 
  delay(2000);
  }
  else
  {
  digitalWrite(LED1, HIGH); 
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
  digitalWrite(LED4, HIGH);
  digitalWrite(LED5, LOW);
  digitalWrite(LED6, LOW);
  digitalWrite(LED7, HIGH);
  digitalWrite(LED8, LOW);
  digitalWrite(LED9, LOW);
  motor1.setSpeed(50);  
  motor2.setSpeed(50);    
  }}

Vous trouvez que c’est écrit comme la toute première condition…. ? Relisez bien

Bonjour,
Ecrit comme ceci est-il mieux?
Car cela ne fonctionne Hélas pas non plus...
Merci en tout cas pour votre réponse.
Cordialement,
Denis.

#include "CytronMotorDriver.h"
CytronMD motor1(PWM_DIR, 2, 3); // moteur1 pin 2/3
CytronMD motor2(PWM_DIR, 4, 5); // moteur2 pin 3/4

int LED1 = 6;//VERT G 
int LED2 = 7;//ORANGE G  
int LED3 = 8;//ROUGE G 
int LED4 = 14;//VERT C
int LED5 = 15;//ORANGE C   
int LED6 = 16;//ROUGE C  
int LED7 = 18;//VERT D 
int LED8 = 19;//ORANGE D  
int LED9 = 20;//ROUGE D 
int centerPin = 24;  // This is our input pin for center
int center = LOW;    // HIGH MEANS NO OBSTACLE
int leftPin = 22;   // This is our input pin for left
int left = LOW;     // HIGH MEANS NO OBSTACLE
int rightPin = 26;  //This is our input pin for right
int right = LOW;    // HIGH MEANS NO OBSTACLE



  void setup() {
  //defini les entrees/sorties
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);
  pinMode(LED6, OUTPUT);
  pinMode(LED7, OUTPUT);
  pinMode(LED8, OUTPUT);
  pinMode(LED9, OUTPUT);
  pinMode(centerPin, INPUT);
  pinMode(leftPin, INPUT);
  pinMode(rightPin, INPUT);
  
 
  }
  void loop() {
  center = digitalRead(centerPin);
  left = digitalRead(leftPin);
  right = digitalRead(rightPin);
  if (center == HIGH || left == HIGH || right == HIGH) // CONDITION 1 AVANCE NORMALE 
  {
  digitalWrite(LED1, HIGH); 
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
  digitalWrite(LED4, HIGH);
  digitalWrite(LED5, LOW);
  digitalWrite(LED6, LOW);
  digitalWrite(LED7, HIGH);
  digitalWrite(LED8, LOW);
  digitalWrite(LED9, LOW);
  motor1.setSpeed(50);  
  motor2.setSpeed(50);  
  }
else if
  (digitalRead(centerPin == LOW || leftPin == HIGH || rightPin == HIGH)) // CONDITION 2 CENTRE MASQUE
  {
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
  digitalWrite(LED4, LOW);
  digitalWrite(LED5, LOW);
  digitalWrite(LED6, HIGH);
  digitalWrite(LED7, LOW);
  digitalWrite(LED8, LOW);
  digitalWrite(LED9, LOW);
  motor1.setSpeed(-50);  
  motor2.setSpeed(-50);  
  delay(4000);
  digitalWrite(LED2, HIGH);
  motor1.setSpeed(0);  
  motor2.setSpeed(50); // TOURNE GAUCHE
  delay(2000);
  }
else if
  (digitalRead(centerPin == HIGH || leftPin == LOW || rightPin == HIGH)) // CONDITION 3 GAUCHE MASQUE
  {
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, HIGH);
  digitalWrite(LED4, LOW);
  digitalWrite(LED5, LOW);
  digitalWrite(LED6, LOW);
  digitalWrite(LED7, LOW);
  digitalWrite(LED8, LOW);
  digitalWrite(LED9, LOW);
  motor1.setSpeed(-50);  
  motor2.setSpeed(-50);  
  delay(4000);
  digitalWrite(LED8, HIGH);
  motor1.setSpeed(50); // TOURNE DROITE 
  motor2.setSpeed(0); 
  delay(2000);
  }
  else if
  (digitalRead(centerPin == HIGH || leftPin == HIGH || rightPin == LOW)) // CONDITION 4 DROITE MASQUE
  {
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
  digitalWrite(LED4, LOW);
  digitalWrite(LED5, LOW);
  digitalWrite(LED6, LOW);
  digitalWrite(LED7, LOW);
  digitalWrite(LED8, LOW);
  digitalWrite(LED9, HIGH);
  motor1.setSpeed(-50);  
  motor2.setSpeed(-50);  
  delay(4000);
  digitalWrite(LED2, HIGH);
  motor1.setSpeed(0); // TOURNE GAUCHE
  motor2.setSpeed(50); 
  delay(2000);
  }
  else
  {
  digitalWrite(LED1, HIGH); 
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
  digitalWrite(LED4, HIGH);
  digitalWrite(LED5, LOW);
  digitalWrite(LED6, LOW);
  digitalWrite(LED7, HIGH);
  digitalWrite(LED8, LOW);
  digitalWrite(LED9, LOW);
  motor1.setSpeed(50);  
  motor2.setSpeed(50);    
  }}

Il ne faut pas changer comme ça des et par des ou ou rajouter des conditions en se disant ça va peut-être marcher. Il faut être rigoureux sinon ton code va rapidement devenir un foutoir ingérable. et tu vas te décourager.
Décris clairement le fonctionnement attendu en partant de l'initialisation.
Comment doit se comporter le système si:

  • aucun capteur n'est actif
  • un des capteurs est actifs (en détaillant les action suivant les capteurs actifs)
  • si plusieurs capteurs sont actifs
    Ensuite ce sera plus facile de coder.
    Regarde ce tuto pour t'aider

Bonjour,
merci pour la réponse hyper rapide, je jette un coup d'oeil attentif dès ce soir (sans doute switch case) en première lecture rapide.
Cordialement,
Denis.

Essaye

(digitalRead(centerPin) == LOW)

Bonjour,
merci pour la réponse...
Les 3 capteurs fonctionnent mais me ramènent tous à la condition 2 (centre masqué).
Cordialement,
Denis.

On s'est mal compris.
Je ne parle pas codage. Je parle de description en bon français du comportement de ton système. Et de la création d'un diagramme d'état comme expliqué dans le lien que j'ai donné.
Le but est d'analyser le comportement que tu veux obtenir et de pouvoir en déduire la forme du code. Switch case... ou if... else... C'est du pareil au même. Par contre dans ton analyse si tu oublies des états ou que tu ne prends pas en compte les bonnes conditions pour passer d'un état à l'autre ton système ne fonctionnera pas correctement.
C'est une partie importante dans la conception d'un système et cela fait gagner beaucoup de temps par la suite.

Comparez votre

À

Vous avez en plus la lecture des pins déjà effectuée et dans des variables….

Ensuite, suivez les conseils de @fdufnews, écrivez en français les états des 3 capteurs et les actions à effectuer. Avec 3 capteurs vous avez 8 états possibles.

Merci,
je reprends le fil d'ici 1h.
Cordialement.

Merci, je regarde tout cela et reviens vers vous.
Cordialement,
Denis.