délai de pression sur bouton poussoir

il faut 2 variables

unsigned long TempsDebut;
boolean boutonAppuye; // vrai si le bouton est appuyé

Initialiser boutonAppuye = false ; dans le setup()

Dans la loop()

vous regardez l'état du bp

S' il est enfoncé (lire digitalRead(bpPin) == LOW ou == HIGH // (suivant si vous utilisez un pull up ou pas) et qu'il n'était pas enfoncé juste avant (boutonAppuye == false) vous enregistrez millis() TempsDebut = millis(); et mettez le booléen "bouton enfoncé" à vrai boutonAppuye = true;

S'il est relâché alors boutonAppuye = false ;

Si boutonAppuye ET si (millis()-TempsDebut >= 20000UL) alors 20 secondes se sont écoulées, mettre l'état actif