Pour tenir compte des rematques judicieuses précédentes (toutes sont judicieuses), j'ai copié une partie
******(sans les variables globales ni le setup: il y a une butée au nombre de caractères)
votre code et glissé quelques commentaires qui peuvent signaler une partie des défauts, voire tenté de corriger une toute petite partie.
Excusez ma curiosité, mais ce code est il accepté par un compilateur c++ ?
Est ce que, même s'il accepte ce code, il ne signale pas (par warning) des bizarreries?
Il est dans l'état difficile à lire et à faire évoluer (ne respecte aucun standard de codagede ma connaissance)
void loop()
{
Initialisation:
digitalWrite(ledR, 1);
digitalWrite(ledJ, 1);
while digitalRead (positionverin)//vérification si verin fermé
{
positionverin= digitalRead(capt_vp_f);
if(positionverin==0)//tant que le contact de position du verin principal fermé ne s'enclanche pas
{
digitalWrite(distri_vp_f,1);//fermeture du distributeur
digitalWrite(by_pass,1);//fermeture du by pass
positionverin=1;
}
else { break;} //
}
//la syntax fait elle en sorte que je revérifie capt_vp_f avant de sortir de la boucle? si le capteur et enclanché capt_vp_f=1
digitalWrite(by_pass,0);//ouverture du by pass
digitalWrite(distri_vp_f,0);//ouverture du distributeur
if digitalRead(capt_br)&& digitalRead(capt_scie_h)&& digitalRead(capt_vp_f)&& digitalRead(capt_vniv_f)
{digitalWrite(ledR, 0);}
else
{digitalWrite (buzzer,1);
goto initialisation;}
if digitalRead(man_auto)//manuel=1 auto=0
{goto ModeManuel}
else
{goto ModeAuto} // evitez les goto (ça chagrine les puristes et vous pouvez les remplacer par un appel de fonction
ModeManuel:
while digitalRead(inter_man_auto)=1
{
//deux actions contraires ne peuvent être effectuer en meme temps
//probleme avec le by_pass si le by_pass est fermé alors qu'aucun mouvement n'est fait on casse la pompe. variable??
//avance moteur electrique
if digitalRead(bp_man_avance)&&digitalRead(capt_bu)=0//si bp=1 et butée=0
{digitalWrite(marche_moteur);}
//bridage manuel
if digitalRead(inter_man_br)
{digitalWrite(distri_br,1);//distributeur
digitalWrite(by_pass,1);}
//sciage semi automatique
if digitalRead(bp_scie_man)&&digitalRead(inter_man_br)&&digitalRead(capt_br)=0//si le bp de scie est activé ainsi que l'inter de bridage et que le bridage et effectif
{while digitalRead(capt_scie_fc)=0
{digitalWrite(distri_scie,1);//distributeur moteur
digitalWrite(distri_descente,1);
digitalWrite(by_pass,1);
}}//distibuteurs de scie et de descente actionné tant que le sciage n'est pas complet
//si verrins non jumellés(=0)
if digitalRead(twinverrins)=0
{
//ouverture manuelle du verin principal
if digitalRead(bp_ouverture_man_vp)=!digitalRead(bp_fermeture_man_vp)&&digitalRead(capt_vp_o)=0
{digitalWrite(distri_vp_o,1);//distributeur
digitalWrite(by_pass,1);}
//fermeture manuelle du verin principal
if digitalRead(bp_fermeture_man_vp)=!digitalRead(bp_ouverture_man_vp)&&digitalRead(capt_vp_f)=0
{digitalWrite(distri_vp_f,1);//distributeur
digitalWrite(by_pass,1);}
//ouverture manuelle du verin auxilliaire
if digitalRead(bp_ouverture_man_vaux)=!digitalRead(bp_fermeture_man_vaux)&&digitalRead(capt_vaux_o)=0
{digitalWrite(distri_vaux_o,1);//distributeur
digitalWrite(by_pass,1);}
//fermeture manuelle du verin principal
if digitalRead(bp_fermeture_man_vaux)=!digitalRead(bp_ouverture_man_vaux)&&digitalRead(capt_vaux_f)=0
{digitalWrite(distri_vaux_f,1);//distributeur
digitalWrite(by_pass,1);}
}
//si verrins jumellés(=1)
if digitalRead(twinverrins)=1
{
//ouverture manuelle des verins
if digitalRead(bp_ouverture_man_vp)=!digitalRead(bp_fermeture_man_vp)&&digitalRead(capt_vp_o)=0
{digitalWrite(distri_vp_o,1);//distributeur
digitalWrite(distri_vaux_o,1);
digitalWrite(by_pass,1);}
//fermeture manuelle des verins
if digitalRead(bp_fermeture_man_vp)=!digitalRead(bp_ouverture_man_vp)&&digitalRead(capt_vp_f)=0
{digitalWrite(distri_vp_f,1);//distributeur
digitalWrite(distri_vaux_f,1);
digitalWrite(by_pass,1);}
}
}
ModeAuto:
while (digitalRead(inter_man_auto)=0)
{
//deux actions contraires ne peuvent être effectuer en meme temps
//avance moteur electrique
while //while QUOI
{if digitalRead(capt_bu)=0//tant que l'on est pas en butee on reste dans la boucle
{digitalWrite(marche_moteur);}}
//bridage, sciage
while
//while QUOI
{if digitalRead(capt_bu)
{digitalWrite(distri_br,1);//distributeur
digitalWrite(by_pass,1);}
delay (1000ms);
//sciage automatique
if digitalRead(capt_br)=0
{while if digitalRead(capt_scie_fc)=0
{digitalWrite(distri_scie,1);//distributeur moteur
digitalWrite(distri_descente,1);
digitalWrite(by_pass,1);
}}
else
{var_action++;
break;}
//si verrins non jumellés(=0)
//action de fermeture et d'ouverture
if digitalRead(twinverrins)=0
{
if digitalRead(capt_vp_o)&&var_action=1
while//tant que le capteur de position fermé n'est pas activé on reste dans la boucle
if digitalRead(capt_vp_f)=0
{digitalWrite(distri_vp_o,0);
digitalWrite(distri_vp_f,1);//distributeur
digitalWrite(by_pass,1);}
if digitalRead(capt_vp_f)&&var_action=1
//while QUOI
while//tant que le capteur de position ouvert n'est pas activé on reste dans la boucle
if digitalRead(capt_vp_o)=0
{digitalWrite(distri_vp_f,0);
digitalWrite(distri_vp_o,1);//distributeur
digitalWrite(by_pass,1);}}
//si verrins jumellés(=1)
//action de fermeture et d'ouverture
if digitalRead(twinverrins)=1
{
if digitalRead(capt_vp_o)&&var_action=1
//while QUOI
while//tant que le capteur de position fermé n'est pas activé on reste dans la boucle
if digitalRead(capt_vp_f)=0
{digitalWrite(distri_vp_o,0);
digitalWrite(distri_vaux_o,0);
digitalWrite(distri_vp_f,1);
digitalWrite(distri_vaux_f,1);//distributeur
digitalWrite(by_pass,1);}
if digitalRead(capt_vp_f)&&var_action=1 {
// while QUOI?
while//tant que le capteur de position ouvert n'est pas activé on reste dans la boucle
if digitalRead(capt_vp_o)=0
{digitalWrite(distri_vp_f,0);
digitalWrite(distri_vaux_f,0);
digitalWrite(distri_vp_o,1);
digitalWrite(distri_vaux_o,1);//distributeur
digitalWrite(by_pass,1);}}
} // j'ai rajouté des accolades, même si elles ne servent à rien
//ouverture manuelle du verin auxilliaire si non jummelé en mode auto
if digitalRead(bp_ouverture_man_vaux)=!digitalRead(bp_fermeture_man_vaux)&&digitalRead(twinverrins)=0&&digitalRead(capt_vaux_o)=0
) // ***pb parenthese
{digitalWrite(distri_vaux_f,0);
digitalWrite(distri_vaux_o,1);//distributeur
digitalWrite(by_pass,1);}
//fermeture manuelle du verin auxilliaire si non jummelé en mode auto
if digitalRead(bp_fermeture_man_vaux)=!digitalRead(bp_ouverture_man_vaux)&&digitalRead(twinverrins)=0&&digitalRead(capt_vaux_f)=0
) // *****parenthese mal foutue
{
digitalWrite(distri_vaux_o,0);
digitalWrite(distri_vaux_f,1);//distributeur
digitalWrite(by_pass,1);}
}
}
}
Nota: si vous avez un IDE arduino: vous pouvez -désolé de rester général; je n'en ai pas un sous la main...- faire en sorte que le compilateur vous signale toutes les erreurs et tous les avertissements (warnings). Dans tous les cas, les erreurs seront signalées ... et, si vous ne les comprenez pas, vous pouvez les copiller coller et les soumettre à la sagacité de vos lecteurs.
Autre note : est il sain (surtout que ça peut poser des problèmes de sécurité) de se fendre d'un hénaurme bloc de code; ila caut peut être mieux essayer de compiler des petits bouts, moins indigestes.