Pannaux solaires

Bonjour, Bonsoir,
J'ai un projet de créer un pannaux solaire qui traque le soleil. Or j'ai un problème avec le code :
Vous n'avez pas besoin de lire tout le code étant donner que mon problème n'est que sur une petite partie du code.

Lorsque je fait if angle_2>90 et if M1Sh180==true, la variable M1Sh180 n'est plus la même, je vous explique. Lorsque je fait Serial.println(M1Sh180) avant le if perferct==false, et que je fait en sorte que M1Sh180== true cela me r'envoie 1.
Or lorsque je met if Perfect==false, angle_2>90 et if M1Sh180==true, et remet Serial.println(M1Sh180), et que je fait encore en sorte que M1Sh180 est true, cela me r'envoie alors 0 alors que celui mit plustôt avant le if perfect me r'envoie 1 .

J'aimerai donc savoir comment faire pour que M1Sh180 soit conservé en true jusqu'au if M1Sh180 == true
Merci Beaucoup

Pour le code vous n'êtes pas obligé de tout lire, le plus important est ce qui est juste après le if (perfect==false)

#include <Servo.h>

Servo myservo1;
Servo myservo2;
int value;
double angle_1;
double angle_2;
double angle_3;
double angle_4;
double compte;
double compte1;
double start;
bool C1=false, C2=false, C3=false, C4=false;
bool M1Sh180=false, M1Sa180=false, M2Sh180=false, M2Sa180=false;
bool M1Sh90=false, M1Sa90=false, M2Sh90=false, M2Sa90=false;
bool Defaut=false, Perfect=false;
bool M2h_90_180=false, M2a_0_90=false;

void setup () 
{
// Configuration initial
 Serial.begin(9600);
 myservo1.attach(9);
 myservo2.attach(10);
 angle_1=90;
 angle_2=180;
 start=0;

}

void loop () 
// En boucle
{
// Récupération des valeurs aux Analog
 int valeur_1=analogRead(A2);
 int valeur_2=analogRead(A3);
 int valeur_3=analogRead(A4);
 int valeur_4=analogRead(A5);
  
/* Calcul de la tension
Plus la tension (U) est élevé, plus la résistance (R) l'est aussi
Et vis versa, pas besoin de calculer R*/
 float tension_1=valeur_1*(5.0 / 1023.0);
 float tension_2=valeur_2*(5.0 / 1023.0);
 float tension_3=valeur_3*(5.0 / 1023.0);
 float tension_4=valeur_4*(5.0 / 1023.0);
  
// Indique sur le Moniteur la valeur de la tension (U)
/* Serial.println(tension_1);
 Serial.println(tension_2);
 Serial.println(tension_3);
 Serial.println(tension_4);*/
  
// Mettre en true ou false les variables C1, C2, C3, C4
 if (valeur_1<252)
   C1=true;
 else
   C1=false;
 if (valeur_2<252)
   C2=true;
 else
   C2=false;
 if (valeur_3<252)
   C3=true;
 else
   C3=false;
 if (valeur_4<252)
   C4=true;
 else
   C4=false;
 
 
// Position par défaut et variables de mouvements de servos moteurs
M1Sh180=!(C1) and !(C2) and !(C3) and C4;// or C1 and !(C2) and !(C3) and !(C4) or C1 and !(C2) and C3 and C4 or C1 and C2 and !(C3) and C4;
M1Sa180=!(C1) and !(C2) and C3 and !(C4) or !(C1) and C2 and !(C3) and !(C4) or !(C1) and C2 and C3 and !(C4) or !(C1) and C2 and C3 and C4 or C1 and C2 and C3 and !(C4);
M2Sh180=!(C1) and !(C2) and !(C3) and C4 or !(C1) and !(C2) and !(C3) and !(C4) or !(C1) and !(C2) and C3 and C4 or !(C1) and C2 and C3 and C4 or C1 and !(C2) and C3 and C4 or C1 and !(C2) and !(C3) and C4;
M2Sa180=!(C1) and C2 and !(C3) and !(C4) or C1 and !(C2) and !(C3) and !(C4) or C1 and C2 and !(C3) and !(C4) or C1 and C2 and !(C3) and C4 or C1 and C2 and C3 and !(C4);
M1Sh90=!(C1) and !(C2) and C3 and !(C4) or !(C1) and C2 and !(C3) and !(C4) or !(C1) and C2 and C3 and !(C4) or !(C1) and C2 and C3 and C4 or C1 and C2 and C3 and !(C4);
M1Sa90=!(C1) and !(C2) and !(C3) and C4 or C1 and !(C2) and !(C3) and !(C4) or C1 and !(C2) and C3 and C4 or C1 and C2 and !(C3) and C4;
M2Sh90= !(C1) and !(C2) and !(C3) and C4 or !(C1) and !(C2) and !(C3) and !(C4) or !(C1) and !(C2) and C3 and C4 or !(C1) and C2 and C3 and C4 or C1 and !(C2) and C3 and C4;
M2Sa90=C1 and !(C2) and !(C3) and !(C4) or !(C1) and C2 and !(C3) and !(C4) or C1 and !(C2) and !(C3) and C4 or C1 and C2 and !(C3) and !(C4) or C1 and C2 and !(C3) and C4 or C1 and C2 and C3 and !(C4);
M2h_90_180=C1 and C2 and !(C3) and !(C4) or C1 and C2 and C3 and !(C4) or C1 and C2 and !(C3) and C4 or C1 and !(C2) and !(C3) and !(C4) or !(C1) and C2 and !(C3) and !(C4);
M2a_0_90=!(C1) and !(C2) and C3 and C4 or C1 and !(C2) and C3 and C4 or !(C1) and C2 and C3 and C4 or !(C1) and !(C2) and C3 and !(C4) or !(C1) and !(C2) and !(C3) and C4;
 
 Defaut=!(C1) and !(C2) and !(C3) and !(C4);
 Perfect=C1 and C2 and C3 and C4;
 
// Position de lever de soleil
 if (Defaut==true)
 {
   angle_1=90;
   angle_2=180;
   myservo1.write(angle_1);
   myservo2.write(angle_2);
  
 }
// Faire bouger les servos moteurs suivant les variables positives ou non si Perfect==false
 Serial.println(M1Sh180); //Il affiche bien 1 lorsque M1Sh180 est true
 if (Perfect==false)
  {
   if (angle_2>90)
   {
     Serial.println(M1Sh180);// Il affiche 0 lorsque M1Sh180 est sensé être true, et donc r'envoyer 1
     if (M1Sh180==true)
     {
      Serial.println("Moteur 1 --> Sens horaire (+ 90°)");// Ne marche pas car M1Sh180 est false ici alors qu'il est true avant le if perfect
      angle_1=angle_1-1;// Ne marche pas car M1Sh180 est false ici alors qu'il est true avant le if perfect
      myservo1.write(angle_1);// Ne marche pas car M1Sh180 est false ici alors qu'il est true avant le if perfect
     }
     if (M1Sa180==true)
     {
      angle_1=angle_1++;
     }
     if (M2Sh180==true)
     {
      angle_2=angle_2++;
     }
     if (M2Sa180==true)
     {
      angle_2=angle_2--;
     }
   }
  }
// Deuxième partie des 180 degrès du M2
  if (angle_2<90)
  {
     if (M1Sh90==true)
    {
       angle_1=angle_1--;
    }
     if (M1Sa90==true)
    {
       angle_1=angle_1++;
    }
     if (M2Sh90==true)
    {
       angle_2=angle_2++;
    }
     if (M2Sa90==true)
    {
       angle_2=angle_2--;
    }
  }
// Si le pannau solaire est parallèle au sol
   if (angle_2=90)
   {
     if (Defaut==true)
     {
       if (M2h_90_180==true)
       {
         angle_2=angle_2++;
       }
       if (M2a_0_90==true)
       { 
         angle_2=angle_2--;
       }
     }
   }
// myservo1.write(angle_1);
// myservo2.write(angle_2);
 //Serial.println(valeur_1);
 //Serial.println(C1);
 //Serial.println(angle_2);
 delay (250) ;
}

Merci beaucoup pour votre attention et votre aide :smile:

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Bonsoir @alexator3000

  1. tu devrais avoir maintenant compris où poster les messages en français et ne pas donner à @UKHeliBob un travail supplémentaire pout te 'rappatrier'.

  2. On est ici dans une totale continuité avec avec le fil précédent, le projet est le même ,le code est le même. Il est contreproductif repartir à zéro dans un nouveau fil à chaque fois que tu buttes sur un point particulier....

-> Tu es donc invité à reprendre le fil de discussion précédent pour y poser tes nouvelles questions dans une logique de continuité de l'aide pour un projet , avec son code et son montage. C'est encore plus nécessaire vu les noms de variables ésotériques et la grande table de vérité qui ne favorisent pas l'aide......autant que ça se passe en en lieu unique

:point_right:ça se passe là bas : https://forum.arduino.cc/t/code-panneau-solaire-traqueur-de-soleil/1065449

je clos ce fil de discussion