Attente du clique d'un bouton

Bonjour,

Après deux jours de galère je poste finalement sur le forum parce que je suis un peu désespéré. Actuellement j'essaie de faire un petit système m'alertant lorsque ma boite au lettre a été remplie, comme je n'ai pas encore de composant wifi et que je débute sur Arduino je me concentre sur la détection du courrier. Mon idée est simple :

Un détecteur de mouvement, lorsqu'il capte quelque chose, le mail est envoyé (pour l'instant une LED s'allume) et le programme se "bloque" (Afin de ne pas envoyer un mail par lettre, c'est inutile) et attend que je clique sur un bouton, ce que je ferais en récupérant le courrier.

Seulement je ne réussis pas à débloquer le programme en cliquant sur le bouton et j'ai plusieurs réactions, soit le programme se débloque "tout seul", soit il ne se passe rien soit il ne rentre même pas dans la phase de blocage et tourne juste en boucle. Je vous mets ci-dessous le code utilisé et j'espère que vous pourrez m'aider à comprendre d'où viens le problème et comme le résoudre.

Merci d'avance,

Ninow

Le code :

int ledPin = 5;  // LED on Pin 13 of Arduino
int pirPin = 7; // Input for HC-S501
int btnPin = 8; // Button pin

int pirValue; // Place to store read PIR Value


void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  pinMode(pirPin, INPUT);
 
  digitalWrite(ledPin, LOW);
}

void loop() {
  pirValue = digitalRead(pirPin);
  if(pirValue == 1){
    digitalWrite(ledPin, pirValue);
    bouton();
  }
}

void bouton(){
  Serial.println("test");
  while(digitalRead(btnPin) == LOW){
    
  }
  digitalWrite(ledPin, LOW);
  Serial.println("caca");
  loop();
}

Tu dois définir aussi le pinMode du bouton.
Ensuite, inutile d'appeler loop depuis la fonction bouton, c'est ce qui provoque le comportement erratique de ton code

Ah oui, erreur à la con >.<

J'ai corrigé ça, je remet le code et le schema de branchement parceque ça ne fonctionne toujours pas, soit la led reste allumée le temps de l'input du capteur (en envoyant les messages de test en boucle) soit elle reste allumé jusqu'a ce que j'approche ma main (hors du rayon de vision du capteur)

int ledPin = 5;  // LED on Pin 13 of Arduino
int pirPin = 7; // Input for HC-S501
int btnPin = 8; // Button pin

int pirValue; // Place to store read PIR Value


void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  pinMode(pirPin, INPUT);
  pinMode(btnPin, INPUT);
 
  digitalWrite(ledPin, LOW);
}

void loop() {
  pirValue = digitalRead(pirPin);
  if(pirValue == 1){
    digitalWrite(ledPin, HIGH);
    bouton();
  }
}

void bouton(){
  Serial.println("test");
  while(digitalRead(btnPin) == LOW){
    
  }
  digitalWrite(ledPin, LOW);
  Serial.println("caca");
}

Selon ton schéma, tu devrais mettrepinMode(btnPin, INPUT_PULLUP);et lire ceci
Avec ça, le bouton appuyé renvoie un LOW, donc il faut changerwhile(digitalRead(btnPin) == HIGH)

Ceci dit, je ne comprends pas ce que tu veux dire ici

soit la led reste allumée le temps de l'input du capteur (en envoyant les messages de test en boucle) soit elle reste allumé jusqu’à ce que j'approche ma main (hors du rayon de vision du capteur)

Ici, tu allumes la led lorsque le capteur capte:

  if(pirValue == 1){
    digitalWrite(ledPin, HIGH);

et restera allumée tant que le bouton n'est pas enfoncé.

Je me rends compte que c'est beaucoup d'erreurs que je n'aurais pas fait il y a quelques mois avant ma "pause" d'Arduino ahah

Je test en rentrant ce soir ce qui concerne le bouton.

Par messages de test j'entends "test" et "caca" (je savais pas quoi mettre ça va hein !) qui s'affichent dans le moniteur série mais ça doit venir de l'inversion "HIGH" et "LOW" du bouton.

Merci pour ta réponse, je renverrais un message ce soir en fonction du résultat !

Ça fonctionne parfaitement ! Merci beaucoup pour ton temps, plus qu'a commander un module wifi, réussir à envoyer des mail et à faire une jolie boiboite pour mettre tout ça en place !

Bah, tranquille...