Un serial.print dans chacun des if pour voir où passe le programme devrait permettre de comprendre ce qui ce passe.
Beaucoup de if les uns derrière les autres compliquent pas mal la compréhension du déroulement.
Typiquement ça c'est sûrement non voulu. La première condition est écrasée par la suivante:
if(etatledG2 < ligne && etatledG1 < ligne) // Si le capteur vois la ligne sur le G2
{
VMG = 255;
VMD = 125;
}
if(etatledG2 < ligne ) // Si le capteur vois la ligne sur le D3 ET D2 - Permet de faire un niveau de correction supplémentaire
{
VMG = 255;
VMD = 0;
}
Lorsqu'il y a pas mal de cas, il peut être plus sur de créer un octet qui combine les entrées et de faire un switch .... case...
On est certain que les cas sont mutuellement exclusif. On a un cas par défaut. Et on peut plus facilement voir ce qui ne va pas.
#define vuD2 1
#define vuD1 2
#define vuCD 4
#define vuCG 8
#define vuG1 16
#define vuG2 32
condition = (etatledG2 < ligne)<<5 | (etatledG1 < ligne)<<4 | (etatledCG < ligne)<<3 | (etatledCD < ligne)<<2 | (etatledD1 < ligne)<<1 | (etatledD2 < ligne);
switch(condition){
case (vuG2 | vuG1) :
VMG = 255;
VMD = 125;
break;
case (vuG1 | vuCG) :
VMG = 255;
VMD = 200;
break;
case :
case :
default:
VMG = 0;
VMD =0;
break;
}
Edit remplacement des + par des | dans les opérations logiques et quelques fautes de frappes