Problème, parfois la boucle de mon programme ne s'exécute pas entièrement et rep

Bonjour à tous

J’utilise depuis peu l’arduino pour contrôler 5 électrovannes. J’ai appris le langage de programmation et les branchements de la carte et j’ai pu rapidement lancer une routine pour ouvrir et fermer mes éléctrovannes. Les premières routines se sont bien exécutées mais maintenant les actions réalisés par mon montage ne suivent pas mon programme.

Voici mon programme :

*int A = 8; int B = 7; int C = 6; int D = 5; int E = 4;

void setup() { pinMode(A, OUTPUT); pinMode(B, OUTPUT); pinMode(C, OUTPUT); pinMode(D, OUTPUT); pinMode(E, OUTPUT); }

void loop() {

// PHASE 1 : vannes A,B,C,D,E ouvertes digitalWrite(A, HIGH);
digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, HIGH); delay(10000);

// PHASE 2 : fermeture des vannes A, D et E digitalWrite(A, LOW);
digitalWrite(D, LOW); digitalWrite(E, LOW); delay (5000);

// PHASE 3 : ouverture des vannes A et D ; fermeture des vannes B et C
digitalWrite(A, HIGH);
digitalWrite(D, HIGH); digitalWrite(B, LOW); digitalWrite(C, LOW); delay (5000);

// PHASE 4 : ouverture des vannes B et E ; fermeture de la vanne D digitalWrite(B, HIGH); digitalWrite(D, LOW); digitalWrite(E, HIGH); delay(60000);

// PHASE 5 : fermeture des vannes A, B et E digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(E, LOW); delay(1000); }

Les phases 1 et 2 sont bien exécutées mais la procédure ne continue pas vers les phases suivantes et recommence à la phase 1.

Je laisse alors allumé mon montage qui tourne en boucle entre les phases 1 et 2, puis au bout d’un certain temps la routine se met en route et fonctionne comme prévue. Elle s’exécute normalement, puis le problème réapparait, après la phase 2 (ou parfois après la phase 3) on repart à la phase 1 au lieu de continuer la procédure.

En bref au lieu de se dérouler entièrement, PARFOIS mon programme interrompt son cycle pour recommencer au départ.

Je ne comprend pas d’où vient le problème, d’autant plus que le problème n’est pas constant, certaine fois le cycle est bien exécuté.

J’ai pensé à des faux contacts …

J’ espère avoir été clair. Si vous avez rencontré ce problème ou si vous avez des pistes, des idées pour résoudre ce problème ça m’aiderais beaucoup.

Merci

votre programme tel que publié est un peu court :)

sinon le comportement que vous décrivez - sans voir le code - ressemble à un reboot intempestif de la carte qui peut avoir de multiples origines ou alors vous avez des conditions dans le code que vous pensez correctes mais qui ne le sont pas...

bref - partagez le code, dites nous comment tout est branché et alimenté, comment vous protégez votre arduino des électrovannes etc...

Je l'avais oublié. Je viens de le rajouter :)

le code des phases 4 et 5 est en commentaire... idem pour la vanne A dans Phase 1 et 2??

pourquoi la pin A est définie en * int?? ça ne va pas compiler... bon je suppose que c'est dû au copier coller mais il vaut mieux les déclarer enconst byte A = 8;par exemple

sinon delay(60000); ça fonctionne mais prenez l'habitude pour les grands entiers de rajouter le fait qu'ils soient stocké dans un long ou unsigned long parce que le jour ou vous voudrez attendre 2 fois ce temps là en faisant delay([color=red]2*[/color]60000); ça ne fonctionnera pas car le calcul se fera en entier et donc limité au max à 32767 et il y aura un overflow et le temps du delay ne sera pas celui que vous voulez.

la bonne pratique - puisque la fonction delay() prend en paramètre un unsigned long - c'est de confirmer que la valeur que l'on passe est bien un unsigned long delay(60000[b][color=green]ul[/color][/b]); et comme cela delay(2*60000[b][color=green]ul[/color][/b]); fonctionnera sans pb.

ça donne donc cela (indenté lisiblement)

const byte A = 8; // Serait bien de donner des noms cohérents aux pins
const byte B = 7;
const byte C = 6;
const byte D = 5;
const byte E = 4;

void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
}

void loop() {

  // PHASE 1 : vannes A,B,C,D,E ouvertes
  digitalWrite(A, HIGH);
  digitalWrite(B, HIGH);
  digitalWrite(C, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(E, HIGH);
  delay(10000ul);

  // PHASE 2 : fermeture des vannes A, D et E
  digitalWrite(A, LOW);
  digitalWrite(D, LOW);
  digitalWrite(E, LOW);
  delay (5000ul);

  // PHASE 3 : ouverture des vannes A et D ;fermeture des vannes B et C
  digitalWrite(A, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(B, LOW);
  digitalWrite(C, LOW);
  delay (5000ul);

  // PHASE 4 : ouverture des vannes B et E ;fermeture de la vanne D
  digitalWrite(B, HIGH);
  digitalWrite(D, LOW);
  digitalWrite(E, HIGH);
  delay(60000ul);

  // PHASE 5 : fermeture des vannes A, B et E
  digitalWrite(A, LOW);
  digitalWrite(B, LOW);
  digitalWrite(E, LOW);
  delay(1000ul);
}

sinon à part ça le code se tient, donc creuser la piste de l'alimentation électrique et des pbs de connexions. Comment tout cela est il alimenté et protégé??