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