Problème de réinitialisation de l'arduino quand une condition est vraie

Bonjour !
Voici mon probleme :
Lorque j'appuie sur un bouton relie a la broche 12 de mon arduino , cela doit eteidre des lazers , ecrire un message dans la console et allume une led en broche 2 . Or lorsque j'appuie sur le bouton mon arduino ono s'éteint completement .
voici mon code :

#include <Arduino.h>
#include <Servo.h>

#define LaserPin 7

// Broches pour les capteurs laser
int Lazer1 = A5;
int Lazer2 = A4;
int Lazer3 = A3;
int Lazer4 = A2;
int Lazer5 = A1;
int Lazer6 = A0;

// Broches pour les LEDs
int led1 = 9; // S'allume si l'un des lazers est < 200
int led2 = 10; //s'allume si aucun lazer coupe
int led3 = 11; // Vous pouvez utiliser cette broche pour une autre indication si nécessaire


// Broche pour alimenter les lasers
int LaserPowerPin = 7;

// Broche pour indiquer la fin du minuteur
int TimerEndPin = 13;

// Durée à soustraire au minuteur si l'une des variables est inférieure à 200
const unsigned long SUBTRACTION_TIME = 30000; // 30 secondes en millisecondes

// Durée du minuteur en millisecondes
const unsigned long TIMER_DURATION = 600000; // 10 minutes en millisecondes

// Variables pour stocker le temps de début et le temps écoulé
unsigned long startTime = 0;
unsigned long elapsedTime;
int compteur = 0;
int btstate;

Servo bg;

void setup() {
  pinMode (LaserPin, OUTPUT);
  pinMode(LaserPowerPin, OUTPUT);
  pinMode(led1, OUTPUT);
  pinMode(TimerEndPin, OUTPUT);
  digitalWrite(7, HIGH);
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(A3, INPUT);
  pinMode(A4, INPUT);
  pinMode(A5, INPUT);
  Serial.begin(115200);
  // Initialiser le servo moteur
  bg.attach(11);
  pinMode(12,INPUT);
  pinMode(2,OUTPUT);
}

void loop() {
  btstate=digitalRead(12);
  Serial.println(compteur);
  Serial.println(compteur);
  Serial.println(compteur);
  while((btstate==0) && (compteur==0)){
    btstate=digitalRead(12);
    unsigned long currentMillis = millis();
    digitalWrite(8, HIGH);
    digitalWrite(LaserPin, HIGH);
    Lazer1 = analogRead(A5);
    Lazer2 = analogRead(A4);
    Lazer3 = analogRead(A3);
    Lazer4 = analogRead(A2);
    if (startTime == 0) {
      startTime = currentMillis;
    }
    // Vérifier si l'un des capteurs laser est déclenché
    if (Lazer1 < 200 || Lazer2 < 200 || Lazer3 < 200 || Lazer4 < 200) {
      digitalWrite(led2, LOW);
      digitalWrite(led1, HIGH);
      elapsedTime = currentMillis - startTime;
      // Soustraire 30 secondes du temps écoulé si nécessaire
      elapsedTime += SUBTRACTION_TIME;
      startTime -= SUBTRACTION_TIME;
      delay(150);
      
    }

    else {
      digitalWrite(led2, HIGH);
      digitalWrite(led1, LOW);
    }

    // Calculer le temps écoulé depuis le début du minuteur
    elapsedTime = currentMillis - startTime;
    
    
  if (elapsedTime <= TIMER_DURATION){
    unsigned long remainingTime = (TIMER_DURATION - elapsedTime) / 1000;
    Serial.print("Temps restant : ");
    Serial.print(remainingTime / 60);
    Serial.print(" minutes ");
    Serial.print(remainingTime % 60);
    Serial.println(" secondes");
  }
    // Vérifier si le minuteur est écoulé
    if (elapsedTime >= TIMER_DURATION) {
      // Déclencher le servo moteur pour faire tourner de 90 degrés
      bg.write(180);
      digitalWrite(TimerEndPin, HIGH);
      Serial.println("temps ecoule ");
  
    }
  }
  while(btstate==1){
    digitalWrite(7,LOW);
    Serial.println("code bon");
    compteur = compteur + 1;
    digitalWrite(2,HIGH);
  }
  }
voila merci beaucoup pour votre future aide ! :slight_smile:

Bonjour lechatmahou123

Vu le symptôme, je tablerai plus sur une question de câblage.
As tu vérifié les branchements de ton bouton?

Cordialement
jpbbricole

Bonjour !
Je viens de verifier mon cablage et il me semble corecte .
Aussi mon moniteur m'indique lorsque je presse le bouton que il n'est pas conecte a l'arduino .
De plus la led sur l'arduino uno on s'éteint lorque j'appuie sur ce dernier

Bonjour lechatmahou123
As-tu un schéma de ton montage, ou fait une photo en gros plan de ton montage.

Cordialement
jpbbricole

voici le shema de mon circuit

cordialement,
lechatmahou123

Ton schéma n'est pas à jour,

image
il n'y a rien sur cette broche 12 et comme ça semble être le noeud du problème ... :wink:

A+
jpbbricole

j'ai du l'oublie mais il est bien branche sur mon arduino !

Oui, je ne doute pas, mais pour qu'il provoque l'extinction de ton Arduino, j'aimerai bien savoir comment il est branché?

voici le shema ré-actualise

Postez le schéma ici directement en jpg pas de lien sur un truc externe, peu de membres iront suivre le lien

le probleme est que je ne peux pas car je ne suis pas "assez vieux" sur le forum

Si vous alimentez un servo et un laser un peu puissant depuis l’arduino vous aurez un appel de courant trop fort pour ce qui est dispo, la tension s’effondrera et l’arduino plantera…

Larduino n’est pas une alim puissante… et les GPIO enocre moins…

c'est donc ce qui arrive pour moi . Comment puis-je faire pour regler ce probleme ?

Prévoyez une alim directe pour le servo.
Joignez les GNDs
Pour les lasers il faut prévoir un étage de puissance avec un transistor / mosfet

donc une alim 5v directe depuis la pin 5v de l'arduino irai , en plus de un circuit mosfet pour mes lazer ?

Bonjour,

Le bouton SW1 fait un court circuit direct entre le 5V et le GND
Ca confirme la supposition de @jpbbricole , ce bouton court circuie l'alim quand il est enfoncé.

Et D12 est directement relié au GND.

Non depuis l’alim vers l’arduino et depuis l’alim vers le moteur. Ne pas faire passer le courant au travers des petites pistes de l’arduino

Et si en plus il y a un court circuit sur le bouton.,,,

ok c'est note ! je corrige mon schema en consequence

un circuit tel que celui ci serait donc le bon

merci d'avance !