Ardino n'execute pas le même prgm lorsqu'elle est branchée au COM/débranchée

Bonjour,
Je fais appel a vous car j'ai un souci avec un programme. je suis en train de mettre au point un robot éviteur d'obstacle en utilisant 1 carte Mega 2560, un L298N et un capteur HC SR-04.

  • Lorsque ma carte est raccordé à l'ordinateur, tout se passe bien :
    Il avance, lorsqu'il detecte un obstacle, recule, tourne sur lui-même(robot a chenilles) puis repart.
  • Lorsque ma carte n'est pas raccordé à l'ordinateur, le programme n'est pas exécuté de la même façon : Il recule, Il tourne, il recule, il tourne,...

Voici mon programme :

//-- MOTEUR A --
int ENA=5; //Connecté à Arduino pin 5(sortie pwm)
int IN1=6; //Connecté à Arduino pin 6
int IN2=7; //Connecté à Arduino pin z

//-- MOTEUR B --
int ENB=8; //Connecté à Arduino pin 8(Sortie pwm)
int IN3=9; //Connecté à Arduino pin 9
int IN4=10; //Connecté à Arduino pin 10

//--HC-SR04--
#define trigPin 3
#define echoPin 2

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);  //Trig est une sortie
  pinMode(echoPin, INPUT);   

  pinMode(ENA,OUTPUT);//Configurer les broches comme sortie
  pinMode(ENB,OUTPUT);
  pinMode(IN1,OUTPUT);
  pinMode(IN2,OUTPUT);
  pinMode(IN3,OUTPUT);
  pinMode(IN4,OUTPUT);
  digitalWrite(ENA,LOW);// Moteur A - Ne pas tourner (désactivation moteur)
  digitalWrite(ENB,LOW);// Moteur B - Ne pas tourner (désactivation moteur)

 // Direction du Moteur A
 digitalWrite(IN1,LOW);
 digitalWrite(IN2,HIGH);

 // Direction du Moteur B
 // NB: en sens inverse du moteur A
 digitalWrite(IN3,HIGH);
 digitalWrite(IN4,LOW);
}
void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); //Trig déclenché 10ms sur HIGH
  digitalWrite(trigPin, LOW);
 
  // Calcul de l'écho
  duration = pulseIn(echoPin, HIGH);
  // Distance proportionnelle à la durée de sortie
  distance = duration*340/(2*10000);  //Vitesse du son théorique
 
  // Moteur A - Plein régime
  analogWrite(ENA,255);
 // Moteur B - Plein régime
  analogWrite(ENB,255);

  if (distance  < 15)
{
  analogWrite(ENA,0);
  analogWrite(ENB,0);
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
  analogWrite(ENA,255);
  analogWrite(ENB,255);
  delay(1500);
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
  delay(1500);
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);
  analogWrite(ENA,255);
  analogWrite(ENB,255);
 
 
}
else
{
  // Moteur A - Plein régime
  analogWrite(ENA,255);
 // Moteur B - Plein Régime
  analogWrite(ENB,255);
}

  }

Si quelqu'un pourrait m'aider, cela m'aiderait beaucoup.
Je vous remercie d'avance
Bonne soirée

bonjour,
demande à un modo de supprimer ton premier post.

pourquoi mettre

// Moteur A - Plein régime
  analogWrite(ENA,255);
 // Moteur B - Plein régime
  analogWrite(ENB,255);

si tu remets la même chose plus bas dans un else

else
{
  // Moteur A - Plein régime
  analogWrite(ENA,255);
 // Moteur B - Plein Régime
  analogWrite(ENB,255);
}

tu es certain que la distance n'est pas <15 plus souvent que prévu?
vérifie tes branchements
alimentation?

J'ai modifié mon code :

//-- MOTEUR A --
int ENA=5; //Connecté à Arduino pin 5(sortie pwm)
int IN1=6; //Connecté à Arduino pin 6
int IN2=7; //Connecté à Arduino pin z

//-- MOTEUR B --
int ENB=8; //Connecté à Arduino pin 8(Sortie pwm)
int IN3=9; //Connecté à Arduino pin 9
int IN4=10; //Connecté à Arduino pin 10

//--HC-SR04--
#define trigPin 3
#define echoPin 2

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);  //Trig est une sortie
  pinMode(echoPin, INPUT);   

  pinMode(ENA,OUTPUT);//Configurer les broches comme sortie
  pinMode(ENB,OUTPUT);
  pinMode(IN1,OUTPUT);
  pinMode(IN2,OUTPUT);
  pinMode(IN3,OUTPUT);
  pinMode(IN4,OUTPUT);
  digitalWrite(ENA,LOW);// Moteur A - Ne pas tourner (désactivation moteur)
  digitalWrite(ENB,LOW);// Moteur B - Ne pas tourner (désactivation moteur)

 // Direction du Moteur A
 digitalWrite(IN1,LOW);
 digitalWrite(IN2,HIGH);

 // Direction du Moteur B
 // NB: en sens inverse du moteur A
 digitalWrite(IN3,HIGH);
 digitalWrite(IN4,LOW);
}
void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); //Trig déclenché 10ms sur HIGH
  digitalWrite(trigPin, LOW);
 
  // Calcul de l'écho
  duration = pulseIn(echoPin, HIGH);
  // Distance proportionnelle à la durée de sortie
  distance = duration*340/(2*10000);  //Vitesse du son théorique
 
  // Moteur A - Plein régime
  analogWrite(ENA,255);
 // Moteur B - Plein régime
  analogWrite(ENB,255);

  if (distance  < 15)
{
  analogWrite(ENA,0);
  analogWrite(ENB,0);
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
  analogWrite(ENA,255);
  analogWrite(ENB,255);
  delay(1500);
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
  delay(1500);
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);
  analogWrite(ENA,255);
  analogWrite(ENB,255);
 
 
}
else
{
  // Moteur A - Plein régime
  analogWrite(ENA,255);
 // Moteur B - Plein Régime
  analogWrite(ENB,255);
}

  }

Mais le problème reste le même. Mes branchement mon l'air OK. Du coté de l'alimentation de la carte, j'utilise pour commander mes moteurs un L298N (shield non-officiel) qui dispose d'une sortie 5v sur laquelle est branchée ma carte MEGA 2560.

PS : comment demander au modo de supprimer mon 1er post ?
Merci

Mais le problème reste le même. Mes branchement mon l'air OK. Du coté de l'alimentation de la carte, j'utilise pour commander mes moteurs un L298N (shield non-officiel) qui dispose d'une sortie 5v sur laquelle est branchée ma carte MEGA 2560.

tu n'as rien changé dans le code
2 fois les même lignes avant ton if et dans le else

tu es certain que la distance n'est pas <15 plus souvent que prévu?

ou que l'alim est suffisante?

simon_rapp1:
PS : comment demander au modo de supprimer mon 1er post ?
Merci

d'aller sur ce 1er post et de clicker sur report to moderator

Excusez-moi, je l'ai bien modifié, mais j'ai fais un mauvais Ctrl+C.

Bonjour,
Apres quelques recherches, j'aui entendu parler de la mémoire EEPROM. Est-ce la solution au problème ?

simon_rapp1:
Apres quelques recherches, j'aui entendu parler de la mémoire EEPROM. Est-ce la solution au problème ?

Bonjour,

Non, ça n'a rien avoir

Je n'ai pas compris comment sont alimentés la carte mega et le shield L298N. Est ce que l'alimentation est suffisante?

Bonjour,
La carte L298N est alimenté sur un transformateur 12V branché sur un prise électrique. Le robot est donc filaire mais c'est du provisoire; il possèdera bientôt un batterie 12V. LA carte Mega est reliée sue une sortie 5V présente sur la carte L298N.
Bonne Journée