Changer le temps d'une fonction

Bonjour à tous!

J’ai décidé avec du matériel de récupération de travailler sur une motorisation de portail. J’ai utilisé le programme disponible ici : http://forum.arduino.cc/index.php?topic=326758.0

Cependant, j’aimerais changer la durée des ouvertures/fermetures, je voudrais que le moteur gauche s’ouvre de 0 à 16 secondes puis le relais pour le moteur gauche s’arrête et enfin pour le moteur droit, une ouverture de 3 à 19 secondes puis le relais pour le moteur droit s’arrête.
Alors oui j’ai essayé de changer les valeurs dans le code sous cette forme :

 if (( millis() - tempo1 ) >= 0 and ( millis() - tempo1 ) <= 16000) //modification pour le gauche
[...]
(( millis() - tempo1 ) >= 3000 and ( millis() - tempo1 ) <= 19000) //modification pour le droit

Mais ce n’est pas pris en compte, ils marchent toujours sous 20 secondes du coup les moteurs forcent contre les butées…
Il y a la solution des fins de course mais je ne peux en mettre. Je souhaite juste modifier le temps de l’instruction.

Merci d’avance à ceux qui m’aideront :slight_smile:

Bonjour, Pas sur que and puisse remplacer && dans une opération de comparaison ?

Il y a déjà une erreur dans le code.

and s’écrit && (voir lien)

Ca serait déjà une bonne raison.

Bonjour,
Cela faisait partie du programme original (qui marchait bien).
Je viens de changer les and en && et même problème…
J’ai également essayé de mettre des delay() mais sans succès également…

ça donne ça actuellement : (programme complet dans le poste de l’auteur)

// Mise en fonction des moteurs (portail)

  if ( tempoMoteur == 1 ) {
    if (( millis() - tempo1 ) >= 0 && ( millis() - tempo1 ) <= 16000) { //Moteur de Gauche de 0 a 20 Secondes

      if (flipflop == 0 ) {
        digitalWrite(in1, LOW);
        digitalWrite(in5, LOW);
      }
      else {
        if (porte1 == 1) {
          digitalWrite(in4, LOW);
          digitalWrite(in8, LOW);
        }
        else {
          digitalWrite(in2, LOW);
          digitalWrite(in6, LOW);
        }
      }
    }
    if (( millis() - tempo1 ) >= 3000 && ( millis() - tempo1 ) <= 20000 && (porte1 == 0)) { // Moteur de Droite de 3 a 20 Secondes
      if (flipflop == 0 ) {
        digitalWrite(in3, LOW);
        digitalWrite(in7, LOW);
      }
      else {
        digitalWrite(in4, LOW);
        digitalWrite(in8, LOW);
      }
    }
    if (( millis() - tempo1 ) >= 20000) { // Arret des Moteurs apres 20 secondes
      digitalWrite(in1, HIGH); // Arret des relais
      digitalWrite(in2, HIGH);
      digitalWrite(in3, HIGH);
      digitalWrite(in4, HIGH);
      digitalWrite(in5, HIGH);
      digitalWrite(in6, HIGH); 
      digitalWrite(in7, HIGH);
      digitalWrite(in8, HIGH);
      porte1 = 0;
      tempoMoteur = 0;
      bloqueB = 0;
    }
  }

Et comme ça ?

tempo2=millis() - tempo1;
 if ( (tempo2 >= 0) && (tempo2 <= 16000) ) {

Pourquoi ne pas mettre des interrupteurs de fin de course ?

Edit: désolé j'ai mal lu... :P