correction de mon code

Bonjour,

Encore et toujours pour mon poulailler, j’ai essayé de créer un code pour l’ouverture et la fermeture de la porte du poulailler.

Beaucoup me diront que ces codes existent déjà mais faire un copier/coller ne m’apprend rien sur la programmation de l’arduino. :slight_smile:

C’est pour cette raison que je vous demande de l’aide pour ce programme de novice qui est loin d’être parfait.

pouvez vous m’aider à finir la dernière partie en m’expliquant comment faire car je n’ai pas trouvé sur les tutos pour ajouter la condition des 1 min de la partie du code suivant:

 // Allumer LED erreur si les fin de course sont les deux appuyés ou que les relais d'ouverture ou de fermeture sont enclenché depuis plus de 1 min
  if ((etatbuttonopen = LOW) && (etatbuttonclose = LOW)) || (delayopen = HIGH) || (relayclose = HIGH){ // si les fins de courses sont les deux appuyé ou que les relais d'ouverture ou de fermeture sont enclenché depuis plus de 1 min
    digitalWrite (lederror, HIGH); // Allumer la lumière d'erreur)
      else { // si les fins de course ne sont pas appuyé en même temps ou que les relais ne fonctionnent pas pendant plus d'une min
        digitalWrite (lederror, LOW); // Eteindre la LED d'erreur
      }
   }

Encore merci à vous pour les différents partages de connaissances et de conseils.

La façon basique delay(60000ul);qui fait une attente active de 60 secondes

La façon plus complexe --> étudiez les exemples de gestion du temps et des états qui sur le long terme sera l'approche à favoriser

Si vous ne lisez que le français étudiez ce tuto

Sinon en anglais Blink Without Delay

Je recommande aussi la lecture et analyse de ce post si vous lisez l'anglais

Bonjour,

Merci pour votre réponse.

J’ai essayé avec le code :

delay(120000ul);

mais cette partie du code dois avoir d’autres erreurs car il ne fonctionne pas.

lorsque j’appui sur “vérification” il me sort des erreurs mais je ne trouve pas la solution

serait-ce possible de me dire ou elles sont ? (et si il faut faire un autre code m’aider à le faire svp)

l’erreur indiqué est :

exit status 1
expected ‘}’ before ‘else’

 // Allumer LED erreur si les fin de course sont les deux appuyés ou que les relais d'ouverture ou de fermeture sont enclenché depuis plus de 1 min
  if ((etatbuttonopen = LOW) && (etatbuttonclose = LOW)) 
    digitalWrite (lederror, HIGH); // Allumer la lumière d'erreur)
      else  // si les fins de course ne sont pas appuyé en même temps ou que les relais ne fonctionnent pas pendant plus d'une min
        digitalWrite (lederror, LOW); // Eteindre la LED d'erreur

  digitalRead (etatrelayopen);
  digitalRead (etatrelayclose);
  
    if (etatrelayopen = HIGH)
      delay(120000ul);
        if (etatrelayopen = HIGH){
          digitalWrite (relayopen, LOW);
          digitalWrite (lederror, HIGH);
            else                   // <== c'est ici que la ligne est en rouge pour signaler l'erreur
               digitalWrite (lederror, LOW);
        }
  
      if (etatrelayclose = HIGH)
      delay(120000ul);
        if (relayclose = HIGH){
          digitalWrite (relayclose, LOW);
          digitalWrite (lederror, HIGH);
            else                   // <== il y a la même erreur ici
              digitalWrite (lederror, LOW);
        }
  digitalRead (etatrelayopen);
  digitalRead (etatrelayclose);

ça c'est pas un pb... On appelle digitalRead() en lui disant quelle pin on veut interroger et il faut stocker le résultat quelque part, donc c'est plutôt variable = digitalRead(pin); qu'il faut faire. (d'où l'importance de nommer les variables qui référencent les pin avec le mot pin et celles qui vont garder l'état de cette pin sans le mot pin.

const byte PinRelayPorte = 7; // le relai est connecté à la pin 7
int etatRelayPorte;
...

etatRelayPorte = digitalRead(PinRelayPorte);

...

sinon pour l'erreur de compilation

if (etatrelayopen = HIGH) [b][color=red]{[/color][/b]
          digitalWrite (relayopen, LOW);
          digitalWrite (lederror, HIGH);
            else

--> la { n'est pas fermée, donc il faut faire

if (etatrelayopen = HIGH) [b][color=green]{[/color][/b]
          digitalWrite (relayopen, LOW);
          digitalWrite (lederror, HIGH);
          [b][color=green]}[/color][/b]  else

et en pressant ctrl-T vous verrez d'ailleurs que l'indentation se met correctement pour montrer les alignements.

merci beaucoup