Problème capteur robot suiveur de ligne

Bonjour bienvenue sur le forum. C'est une bonne chose d'avoir utilisé les balises de code pour poster, il nous manque quelques infos

  • qu'est-ce que MeOrion.h ?
  • quelle bibliothèque pour MeLineFollower ?
  • qu'est-ce que S1 et S2 ?

en pratique on comprend à la lecture du code que lineFinder est une instance de la classe MeLineFollower qui sait lire le capteur (ici connecté sur PORT_3) par le biais de l'appel à la méthode lineFinder.readSensors() qui retourne un état sous forme d'énumération (S1_IN_S2_IN, S1_OUT_S2_IN, ...)

Si vous ajoutez donc un autre capteur (instances LF1 et LF2) sur un autre port et que vous faites

MeLineFollower LF1(PORT_x); // définir où il est connecté
MeLineFollower LF2(PORT_y); // définir où il est connecté

...

  int etatLF1 = LF1.readSensors();
  int etatLF2 = LF2.readSensors();

alors vous aurez dans etatLF1 et etatLF2 l'état de chacun des 2 capteurs.
Ils peuvent prendre chacun 4 valeurs, vous avez donc 16 possibilités à explorer.

➜ il faut remplir chacune des case du tableau avec l'action que vous souhaitez effectuer si cette condition (conjonction des 2 états) est remplie

ensuite vous groupez les cases qui conduisent à la même action et vous réduisez les conjonctions des conditions pour obtenir une valeur de vérité (ça vous fera bosser votre algèbre booléenne) et votre switch() devient un gros

if (conditions1)       actions1();
else if (conditions2)  actions2(); 
else if (conditions3)  actions3(); 
else if (conditions4)  actions4(); 
else                   actions5();

une autre approche c'est l'approche "bourrin" des switch imbriqués ou vous traitez les 25 cas possibles

switch (etatLF1) {
case S1_IN_S2_IN:
  switch (etatLF2) {
    case S1_IN_S2_IN:   break;
    case S1_OUT_S2_IN:  break;
    case S1_IN_S2_OUT:  break;
    case S1_OUT_S2_OUT: break;
    default:            break;
  }
  break;

case S1_OUT_S2_IN:
  switch (etatLF2) {
    case S1_IN_S2_IN:   break;
    case S1_OUT_S2_IN:  break;
    case S1_IN_S2_OUT:  break;
    case S1_OUT_S2_OUT: break;
    default:            break;
  }
  break;

case S1_IN_S2_OUT:
  switch (etatLF2) {
    case S1_IN_S2_IN:   break;
    case S1_OUT_S2_IN:  break;
    case S1_IN_S2_OUT:  break;
    case S1_OUT_S2_OUT: break;
    default:            break;
  }
  break;

case S1_OUT_S2_OUT:
  switch (etatLF2) {
    case S1_IN_S2_IN:   break;
    case S1_OUT_S2_IN:  break;
    case S1_IN_S2_OUT:  break;
    case S1_OUT_S2_OUT: break;
    default:            break;
  }
  break;

default:
  switch (etatLF2) {
    case S1_IN_S2_IN:   break;
    case S1_OUT_S2_IN:  break;
    case S1_IN_S2_OUT:  break;
    case S1_OUT_S2_OUT: break;
    default:            break;
  }
  break;
}

PS: Si le capteur peut retourner autre chose (une valeur d'erreur par exemple) il faudra en tenir compte et ça fait 5x5 états = 25