Bonjour à tous,
Je débute sur Arduino et sur le forum (j'ai déjà réalisé quand même quelques projets qui fonctionnent).
J'ai commencé la réalisation d'un automatisme de portail sous Arduino avec 2 moteurs de récupération.
Je rencontre un petit problème sur lequel j'ai passé quelques heures sans succès.
J'ai besoin de réaliser une boucle qui sort lorsque l'une ou l'autre des 2 conditions et vrai:
While (condition1 || condition2){
mise à jour condition 1
mise à jour condition 2
}
suite du programme
Il se trouve que la fonction "ou" (||) ne fonctionne pas. Si je place une seule une des 2 condition sans le "ou" || cela fonctionne très bien mais si je mets les 2 avec || le programme ne sort pas de la boucle alors que j'ai vérifié avec le moniteur série les variables sont OK et à un moment elles devraient sortir de la boucle...
Idem avec la fonction If
If(condition1 || condition2)...
Bien sûr, à chaque fois mon programme est bien compilé et ne retourne pas d'erreurs.
J'ai bricolé avec 2 boucles If imbriquée tout fonctionne, mais je trouverais plus élégant de passer par while si je souhaite rajouter d'autres conditions.
Je pense que je ne maîtrise pas correctement la fonction While ou la la fonction "ou" ||, j'ai cherché bien sûr sur le net, j'ai trouvé des exemples similaires avec "et" && mais pas avec "ou" ||...
Voici ci-dessous mon code dans son état actuel, pas terminé en cours de développement, il fonctionne pour l'instant sur une maquette et seulement sur un des moteurs.
Je vous remercie par avance pour votre aide
Frédéric
//Définition des variables
int OG=4; //OG= broche ouverture gauche
int FG=5; //FG= broche fermeture gauche
int DOG=8; //DOG= broche détecteur ouverture gauche
int DFG=9; //DFG= broche détecteur fermeture gauche
int CG=A0; //mesure_CG= broche de mesure du courant gauche
int CD=A1; //mesure_CFG= broche de mesure du courant droit
byte etat_DOG; //etat_DOG= valeur du capteur de position ouverture gauche (HIGH ou LOW)
byte etat_DFG; //etat_DOG= valeur du capteur de position fermeture gauche (HIGH ou LOW)
byte etat_DOD; //etat_DOG= valeur du capteur de position ouverture droit (HIGH ou LOW)
byte etat_DFD; //etat_DOG= valeur du capteur de position fermeture droit HIGH ou LOW)
int valeur_CG=0; //CG= valeur du courant gauche (de 0 à 1024)
int valeur_CD=0; //CD= valeur du courant droit (de 0 à 1024)
void setup() //ces lignes sont éxécutées une seule fois lors du démarrage de l'Arduino
{
pinMode( OG , OUTPUT); //La broche OG est utilisée en sortie
pinMode( FG , OUTPUT); //La broche FG est utilisée en sortie
pinMode( DOG , INPUT); //La broche DOG est utilisée en entrée
pinMode( DFG , INPUT); //La broche DFG est utilisée en entrée
}
void loop() //répéter indéfiniment
{
Fermeture (); //exécuter le sous programme "Fermeture"
delay( 500);
Ouverture (); //exécuter le sous programme "Ouverture"
delay( 2000 ); //attendre 2 secondes
Fermeture (); //exécuter le sous programme "Fermeture"
delay( 2000 ); //attendre 2 secondes
}
//Partie des sous programmes ------------------------------------------------------------------------------------------------------------------------------------------------------
// Sous programme "Ouverture"
void Ouverture()
{
digitalWrite( OG , HIGH ); //mettre la sortie "OG" à l'état haut (5 Volts) pour lancer l'ouverture du vantail gauche
etat_DOG = digitalRead(DOG); //lire l'état du Detecteur Ouverture Gauche et le mettre dans la variable etat-DOG
valeur_CG = analogRead(CG); //mesurer le Courant Ouverture Gauche et le mettre dans la variable mesure_DOG
while (etat_DOG == LOW || valeur_CG <500){ //tant que le Detecteur Ouverture Gauche est à l'état LOW et le Courant Ouverture Gauche est inférieur à 500, faire en boucle
etat_DOG = digitalRead(DOG); //lire l'état du Detecteur Ouverture Gauche et le mettre dans la variable etat-DOG
valeur_CG = analogRead(CG); //mesurer le Courant Ouverture Gauche et le mettre dans la variable mesure_DOG
}
digitalWrite( OG , LOW ); //dès qu'une des conditions ci-dessus est active mettre la sortie "OG" à l'état bas (0 Volts) pour arrêter l'ouverture du vantail gauche
}
//Sous programme "Fermeture"
void Fermeture()
{
digitalWrite( FG , HIGH ); //mettre la sortie "FG" à l'état haut (5 Volts) pour lancer la fermerture du vantail gauche
etat_DFG = digitalRead(DFG);
while (etat_DFG == LOW){
etat_DFG = digitalRead(DFG);
}
digitalWrite( FG , LOW ); //mettre la sortie "FG" à l'état bas (0 Volts) pour arrêter la fermerture du vantail gauche
}