Bonsoir, je me suis fait un détecteur de mouvement + lumière.
J'ai une condition qui vérifie si il y a une détection et que la lumière est inférieur à un nombre fixé par un potentiomètre. Je voudrais aussi que si la détection ou la lumière change que le relais reste actif un temps fixé par un autre potentiomètre.
Mon problème actuelle est que si le mouvement n'est plus détecté ou que la lumière augmente, le relais ce coupe alors que je voudrait qu'il reste actif un temps.
J'ai lu le tuto et le code de terwal. Et donc soit je comprend rien soit sa marche pas.
Le problème selon moi est que si "etat_mouvement == 1 && lux < lumiere_choisi" l'une des deux condition change pendant le décompte de temps le relais ce coupe trop top
Il suffit de ne pas tester les conditions des présence ou de luminosité quand vous avez activé le relais
Votre système c'est le relai et son état (actif ou inactif).
les conditions de passage d'un état à un autre sont simples
quand le relai est actif, il faut attendre la fin d'un délai
quand le relai est inactif, on teste la présence et la luminosité
en pseudo code
si relais activé
// le relais est actif on teste le temps passé
si fin du délai
désactiver le relai
sinon
// le relais n'est pas actif, on teste les conditions d'activation
si détection ET lumière < seuil
activer le relais
noter le moment d'activation
je veux bien mais je n'es pas d'info sur l'état du relai et pose un autre problème. j'ai deux condition de forçage qui ne sont pas soumis temps de désactivation
Non justement, sur détection de mouvement et lumière active le relais ce désactive au bout d'un temps.
Mais quand je fait un appuis sur le bouton manuel sa reste allumé (pas de désactivation auto).
si activation ce fait par ESP32, le relais reste allumé jusqu'à ce que ESP32 le coupe (je les mal codé en plus)
Ton pseudo code m'a l'air bien, tu essayer de coder ça.
Dans mon exemple, j'utilise la valeur de timer qui est différent de 0, quand le relais est actif.
Une fois le temps dépasser, le relais est désactivé et la variable timer remis à zéro
J'ai fait sa et sa marche visiblement mais il faut attendre le changement d'état du mouvement ou lumière pour passé à la condition suivant si je rajouté les deux forçage sait plus le cas
remet ton code en entier, c'est plus simple pour discuter que devoir faire des copier/coller de différents messages.
globalement, c'est mieux si tu n'utilise pas de delay qui stoppe ton programme pendant le temps demander.
De même un code avec une indentation standard, permet au lecteur de te lire facilement.
Alors que là, c'est un peu pénible et n'incite pas à prendre du temps pour t'aider.
sinon si dans ton "else if" ta condition prenais aussi comme je l'ai fait en compte si le delais était dépasser, cela devrait marcher, je pense.
si vous tenez la broche com_nanuel à LOW (0) pendant plusieurs boucles (tour de loop()) vous allez inverser constamment etat_BP. Vous devriez faire une détection de changement d'état sans doute non ?
C'est quand même plus lisible?
du coup à quoi sert ton else, c'est vraiment ce que tu veux faire?
Si tu prend le temps(millis) dans le if et que tu compare le temps passer à ton seuil dans le else if, cela fait exactement ce que tu veux