Problème pour sortir d'une boucle

Bonsoir à tous.
Voilà je vous expose mon pb:
je cherche a fabriquer un système simple qui detecte la pluie et qui active un relais pdt une durée déterminé lorsqu'il pleut (le stysteme va permettre de fermer mon velux automatiquement).
Sauf que la, problème. J'arrive bien à faire fonctionner le systeme mais des que le capteur redetecte de la pluie il reboucle et le relais refonctionne. Je souhaiterais réussir a sortir de la boucle lorsque le relais a fonctionner.
Je met mon ptit bout de code à disposition

capteur_de_pluie.ino.ino (492 Bytes)

Bonjour et bienvenue..

idéalement on poste directement le code avec les code tags autour du code:
[code]`` [color=blue]// votre code ici[/color] ``[/code].

ça doit ressembler à cela:// votre code ici
(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement)

----- voici votre code ---

const int capteur = 10; // pin connecté à la sortie digital du capteur
const int relais = 4; // pin connecté à la relais + resistance

void setup()
{
  pinMode(capteur, INPUT);
  pinMode(relais, OUTPUT);
}

void loop()
{
  if (digitalRead(capteur) == LOW)
  {
    //delay(3000);
    digitalWrite(relais, LOW); // Allumer la relais
    delay(1000); // Temps de traitement

  }
  else
  {
    digitalWrite(relais, HIGH); // Eteindre la relais
    delay(10); // Temps de traitement
  }
}

essayez d'écrire en français ce que doit faire votre automate. il lui faudra sans doute une petite mémoire pour savoir dans quel état il est (pluie détectée ou pas)

Oui j'ai vu que après qu'on pouvais integrer le code directement.. désolé

Vous m'avez dit d'integrer une mémoire ? sortir de la boucle ne serais pas plus simple ? du style boucle while avec break ?

et sortir de la boucle pour aller où?

bha pour stopper le programme
j'aimerais qu'il sarrete une fois que le relais est activer 1 fois.
Sinon avec la pluie le capteur va etre continuellement activer et le relais va rester actif ..

et vous ne voulez pas l'arrêter quand la pluie s'arrête?

non j'aimerais qu'il sarrete des qu'il a donner l'ordre au relais de fonction pdt la durée determiné et ensuite stop. Et pour redemarrer le programme -> reboot de la carte manuellement
vous comprenez ?

Oui je comprends :slight_smile:

je trouve ça overkill d'utiliser un microcontroleur pour ça quand un montage électronique suffit (cherchez "latching relay") mais je comprends

Vous pouvez faire exit(0); et ça termine votre programme (ça fait une éternité que je n'ai pas testé le comportement de exit)

bonjour,
c'est se compliquer la vie que de redémarrer la carte

une simple variable dans le if suffit pour stopper la condition

bool arret = false
..
..
..
 if (digitalRead(capteur) == LOW && arret = false)
  {
    //delay(3000);
    digitalWrite(relais, LOW); // Allumer la relais
    delay(1000); // Temps de traitement

arret = true;

  }

et au lieu de redémarrer la carte, un simple bouton qui remet à false arret

infobarquee:
bonjour,
c'est se compliquer la vie que de redémarrer la carte
et au lieu de redémarrer la carte, un simple bouton qui remet à false arret

euh - c'est comme appuyer sur le bouton reset :slight_smile:
si c'est vraiment tout ce que fait l'arduino, faire suivre un signal pour déclencher un relais, il n'y a pas besoin d'arduino.

vous pouvez même avec le montage RC adéquat gérer une durée d'allumage

euh - c'est comme appuyer sur le bouton reset :slight_smile:

oui, mais si la carte est dans un boitier?
tu fais quoi? tu ouvre la boite, donc un bouton externe est le bienvenue :wink:

mais je doute quand même que le nono gère juste le capteur et le relais, sinon, comme tu le dis, il y a des montages avec quelques composants qui économisent une nono.

tu fais quoi? tu ouvre la boite, donc un bouton externe est le bienvenue :wink:

j'enlève la prise et je la remets :slight_smile:

ou alors, tu coupe de disjoncteur de la maison.
franchement, c'est couper les cheveux en 4 tes histoires :wink:

bonne idée :slight_smile: