bouton poussoir multi tache

bonjour tout le monde,

j’aimerais rajouter un système de purge en maintenant l’appuie de bouton poussoir pendant 3 secondes se qui activerait toute mes pompes pendant 20secondes pour purger mon circuit.
comment puis je écrire ça dans mon programme?
et comment faire pour ne pas que mon cycle classique se lance quand j’appuie? actuellement le cycle se lance quand j’appuie sur mon BP de cette facon :

 etatbouton = digitalRead(bouton);
if (etatbouton == HIGH) // Rappel : bouton = 3

en vous remerciant par avance,

Pour simplifier votre gestion des boutons, éventuellement utilisez la librairie de @bricoleau ou alors la librairie OneButton de Matthias Hertel.

vous verrez que vous pouvez simplement réagir à un appui long ou court

si vous voulez le faire à la main, il faut capturer le moment (millis) où vous appuyez sur le bouton et s'il n'a pas été relâché pendant 3s alors déclencher votre purge

Bonjour J-M-L je te remercie pour la réponse, mais je n'arrive pas a appliquer les exemples des 2 librairies a mon programme...

faut essayer... ça change peut-être votre gestion du bouton un peu partout ?
sans votre code on ne peut pas vous aider

voici mon programme :

vous n'avez visiblement même pas essayé...

comment est câblé votre bouton ? vous ne le déclarez pas en INPUT, et pas de PULLUP puisqu'il semble que vous lisiez HIGH pour appui. vous avez un pull-down externe ? le plus simple reste quand même d'utiliser les PULLUP internes...

votre bouton n'est lu qu'à un seul endroit, donc ça n'est pas super compliqué... câblez le pour un pull up (donc pin --- bouton ---- GND) et regardez les exemples de la librairie de @bricoleau, il y en a une pour détecter quand le bouton a été actionné et un autre pour voir le temps d'appui...

voilà un petit bout de code à tester (console à 115200 bauds. bouton en câblé comme expliqué ci dessus)

#include "simpleBouton.h"

//Cablage : pin---BP---GND
simpleBouton bouton(4);

void setup()
{
  Serial.begin(115200);
}

void loop()
{

  uint32_t duree = bouton.dureeEnfonce();  //Lecture de la durée d'appui AVANT d'actualiser
  bouton.actualiser();
  if (bouton.vientDEtreEnfonce()) Serial.println(F("Enfoncé"));

  if (bouton.vientDEtreRelache()) {
    Serial.println(F("Relâché"));
    if (duree > 3000) { // message supplémentaire si appui plus de 3s
      Serial.print(F("Appui pendant ")); Serial.print(duree); Serial.println(F(" ms"));
    }
  }
}

ensuite votre code gagnerait en lisibilité s'il était bien organisé en machine à états (cf mon tuto éventuellement)

mon bouton est cablé en 5V-- BP-- PIN avec une résistance en pull down vers le GND

câblez le en pullup (avec le pullup interne donc juste pin ---- bouton --- GND, pas de résistance nécessaire) et essayez le petit bout de code donné ci dessus