millis() et relais

Bonjour, je n’arrive pas à faire fonctionner la fonction millis et je ne vois pas mon erreur.
L’idée est que lors l’écran tactile est activé cela enclenche le relais pendant 2 secondes.

long montemps = 0; //déclaration de la variable



void loop()

{  
  if (myTouch.dataAvailable()){myTouch.read();x=myTouch.getX();y=myTouch.getY();// gestion du tactile
  
  if (x>10 && x<400 && y>1 && y<200)//si action dans la zone de l'écran
{ 
    if(millis()-montemps > 2000) { // 
        montemps = millis();
        digitalWrite(relai_pompe1,LOW);//activation du relais
        }      
 
 digitalWrite(relai_pompe1,HIGH);// mise à zéro du relais
  
  }
}
}

Merci de votre aide.
Bonne journée

Là tu fais "une fois que 2 sec se sont écoulées, activation du relais...", tu temporises une attente de 2s.

Pour faire une action "tant que 2sec ne se sont pas encore écoulées" il y a la syntaxe while http://arduino.cc/en/Reference/While

Bonjour,

Tu dois constamment vérifier si le temps est écoulé. Essaie ça:

bool relaisON = false;

void loop()
{  
  if (myTouch.dataAvailable())
  {
    myTouch.read();
    x=myTouch.getX();
    y=myTouch.getY();// gestion du tactile

    if (x>10 && x<400 && y>1 && y<200)//si action dans la zone de l'écran
    { 
      montemps = millis();
      relaisON = true;
      digitalWrite(relai_pompe1,LOW);//activation du relais
    }
  }

  // si le relais est allumé et le temps est écoulé
  if( relaisON && millis() - montemps > 2000 )
  {
    relaisON = false;
    digitalWrite(relai_pompe1,HIGH);// mise à zéro du relais
  }
}

mon relais est inversé pour l'activé je suis obligé de le mettre en LOW

Mon idée de départ est: touche du clavier > activation du relais pdt 2 secondes > puis désactivation du relais jusqu'à la prochaine touche.

Oui, et alors?

je viens de tester ta solution guix cela fonctionne parfaitement.
Ma réponse précédente était pour Christian_R.

Merci

Une petite question pourquoi ne peut-on mettre if( relaisON && millis() - montemps > 2000 ) etc... dans les accolade de if (myTouch.dataAvailable()) ?

Si tu le met dans cette partie du code, il sera exécuté seulement quand tu touche l’écran… Or ton arduino doit être capable d’exécuter ce bout de code tout le temps, pour qu’il puisse vérifier si le temps est écoulé. :smiley_cat:

Ok je viens de rentré du boulot. merci, bonne soirée.