detecteur de son avec microphone et action d'un relais

bonjour à tous et merci pour vos diverses aides.
Je viens de terminer le branchement d'un déclencheur de relais via microphone.
Voici le branchement trouvé sur le net:

tout fonctionne à merveille MAIS je n'arrive pas à trouver de solution pour que le relais s'éteigne seul au bout d'un certain moment par exemple 10seconde

voila ma ligne de code:

const int relayPin = 8;
const int soundPin = 9;
int soundVal = 0;
int relayToggle = HIGH;
int previousState = LOW;
void setup ()
{
** pinMode (relayPin, OUTPUT);**
** pinMode (soundPin, INPUT);**

}

void loop ()
{
** soundVal = digitalRead(soundPin);**
** if (soundVal == LOW && previousState==HIGH)**
** {**
** relayToggle=!relayToggle;**
** digitalWrite (relayPin, relayToggle);**
** }**
** previousState=soundVal;**
Si vous avez des suggestions !
merci encore

Bonjour,

Pour intégré la notion de temps dans votre programme, je vous conseille cette lecture.

bonsoir
dans le setup il faut initialiser une variable " temporelle "

int Vtemp=0;

dans la loop () principale , a chaque passage du pointeur programme , cette variable vas s' incrémenter de 1 a la condition que (if) le relais soit actif et que aucun sons ne sois émis.

si il y a un changement d' état du relais du a un bruit on réinitialise la variable de temps(=0).

de plus on vas fixer une valeur maximale de cette variable qui va correspondre a une durée
au sens cycle machine ,nombre de passage pointeur ,et non a une durée de type délay qui met tout le programme en pause .

par exemple 2000 boucle sans bruit et relais enclenché.

au bout d' un moment ou la lampe est allumé et qu'il n'y a pas de bruits la variable devient égale a 2000 ( par exemple , valeur qu'il faudra déterminer a taton).
alors on passe le relais a zéro et la variable a zéro

----mais ou disposer tout cela ??

la difficulté c'est que le programme ne dit pas quant le relais est a zéro ou a un ;
il inverse (!) la valeur de sortie suite a un front descendant du microphone.

maintenant comme ce point d’insertion est l' événement déclencheur , forcément
c'est la que l'on peu réinitialiser la variable temps.

Vtemp=0;

une foie sortie de l'accolade et juste avant l'accolade de fin de la loop principale ,
qui je vous signale au passage , a été oublié .
vas falloir un truc du style

previousState=soundVal;//ligne deja présente
  if (relayToggle == HIGH) { Vtemp=Vtemp+1;}// début rajout
if (Vtemp==2000 && relayToggle == HIGH) //un = ou deux egal nuance a voir!
     {
relayToggle = LOW;//éteindre dépend du module relais
 Vtemp=0;//peut être inutile a tester
     }
  }// accolade finale oubliée

j 'ai supposé que le module relais devient passant quant la pin 8 de l' arduino est high
mais cela dépend du module : il faut peut être inverser les high et low ??
, c 'est vrai qu'il est initialisé en début de programme comme hight.... tout de pend si a la mise sous tension , sans faire de bruit la lampe s'allume de suite.

donc a voir