Capteur HC-SR04 et programme arduino

Bonjour,

Je souhaite faire marcher mon programme arduino. La partie qui bloque commence à partir de While. Ce programme a pour vocation de détecter une distance, créer un tableau et y insérer X valeurs de distances consécutives, effectuer une moyenne et enfin modifier l’etat de la led en fonction de la condition : “dernière ligne du tableau<moyenne< première ligne du tableau”

Voici mon programme

#define trigPin 13
#define echoPin 12
#define led 11
#define led2 10


void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW);  
  delayMicroseconds(2); 
  digitalWrite(trigPin, HIGH);
//  delayMicroseconds(1000); 
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  if (distance < 120) {  
  digitalWrite(led,HIGH); 
  digitalWrite(led2,LOW);
}
  else {
    digitalWrite(led,LOW);
    digitalWrite(led2,HIGH);
  }

while (50<distance && distance<120)
{
float moyenne(float tableau[], int nombreValeur)
{
    int i = 0;
    double total = 0;
    float moyenne = 0; 
    for(i = 0; i < 10; i++)
    {
        total = total + tableau[i];
    }
    moyenne = total / 10;
    int valeur0 = tableau[0];
    int valeur10 = tableau[10];
}
}
if (tableau[10]< moyenne && moyenne < tableau[0])
{
 {
  digitalWrite(led, HIGH);  
  delay(500);           
  digitalWrite(led, LOW);   
  delay(500);             
  digitalWrite(led2,LOW); 
}

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

Toutefois ce code comporte des errreurs, selon le programme, et je ne suis pas assez compétent pour les identifier.

Merci de votre aide.

bonjour,

Toutefois ce code comporte des errreurs, selon le programme, et je ne suis pas assez compétent pour les identifier.

quelles erreurs?

while (50<distance && distance<120)

toujours vrai si distance < 120 donc pourquoi mettre <50 puisque <120 ?

infobarquee:
bonjour,quelles erreurs?

while (50<distance && distance<120)

toujours vrai si distance < 120 donc pourquoi mettre <50 puisque <120 ?

Bonjour,

Voici une première erreur détectée

C:\Users\Documents\Arduino\code_HC-SR04_V2\code_HC-SR04_V2.ino: In function ‘void loop()’:

code_HC-SR04_V2:38: error: a function-definition is not allowed here before ‘{’ token

{

^

code_HC-SR04_V2:66: error: expected ‘}’ at end of input

}

^

exit status 1
a function-definition is not allowed here before ‘{’ token

Le 50 correspond à une distance minimale. C’est à dire que si une distance est détectée avant 50 cm il ne doit pas en prendre compte.

autant pour moi, mal lu le while

par contre copie colle les erreurs, en image on voit rien, même si j’ai ce qu’il faut pour agrandir.

Inscrit aujourd'hui à 17h30 , déjà 4 posts chez les anglo américains et 1 ici
Ola on dirai que ça urge, cela sent un début d'affolement. Les pieds serait-il retombés au niveau du sol en ce retour de vacances ?

Si tu regarde les messages d'erreurs (quasiment illisibles --> un copié coller à la souris est plus simple et plus lisible qu'une copie d'écran et nous éviterait de nous abîmer les yeux à essayer de lire) tu verra que c'est des erreurs de syntaxe : il manque des parenthèses et/ou des accolades.

Commence par indenter ton code avec le bouton qui va bien dans l'IDE et visuellement ce sera plus facile pour trouver les endroits fautifs.
Commence TOUJOURS par la première erreur car une erreur peut mettre le compilateur en défaut sur la suite des lignes de code.
Souvent la résolution de la première erreurs en fait disparaître beaucoup d'autres.

68tjs:
Inscrit aujourd’hui à 17h30 , déjà 4 posts chez les anglo américains et 1 ici
Ola on dirai que ça urge, cela sent un début d’affolement. Les pieds serait-il retombés au niveau du sol en ce retour de vacances ?

Si tu regarde les messages d’erreurs (quasiment illisibles → un copié coller à la souris est plus simple et plus lisible qu’une copie d’écran et nous éviterait de nous abîmer les yeux à essayer de lire) tu verra que c’est des erreurs de syntaxe : il manque des parenthèses et/ou des accolades.

Commence par indenter ton code avec le bouton qui va bien dans l’IDE et visuellement ce sera plus facile pour trouver les endroits fautifs.
Commence TOUJOURS par la première erreur car une erreur peut mettre le compilateur en défaut sur la suite des lignes de code.
Souvent la résolution de la première erreurs en fait disparaître beaucoup d’autres.

J’ai réduit l’indentation comme ceci

#define trigPin 13
#define echoPin 12
#define led 11
#define led2 10


void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
}

void loop() {
long duration, distance;
digitalWrite(trigPin, LOW); 
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
//  delayMicroseconds(1000);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
if (distance < 120) { 
digitalWrite(led,HIGH);
digitalWrite(led2,LOW);
}
else {
  digitalWrite(led,LOW);
  digitalWrite(led2,HIGH);
}

while (50<distance && distance<120)
{
float moyenne(float tableau[], int nombreValeur)
{
  int i = 0;
  double total = 0;
  float moyenne = 0;
  for(i = 0; i < 10; i++)
  {
      total = total + tableau[i];
  }
  moyenne = total / 10;
  int valeur0 = tableau[0];
  int valeur10 = tableau[10];
}
}
if (tableau[10]< moyenne && moyenne < tableau[0])
{
{
digitalWrite(led, HIGH); 
delay(500);           
digitalWrite(led, LOW);   
delay(500);             
digitalWrite(led2,LOW);
}

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

Et bien le problème c’est que je n’arrive pas à trouver les erreurs, cher 68tjs

Mon très, très cher lycéen ce que tu as fait ne s’appelle pas une indentation.
si tu ne connais pas ce terme regarde dans un dictionnaire.
Voici ton fichier indenté:

#define trigPin 13
#define echoPin 12
#define led 11
#define led2 10


void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  //  delayMicroseconds(1000);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration / 2) / 29.1;
  if (distance < 120) {
    digitalWrite(led, HIGH);
    digitalWrite(led2, LOW);
  }
  else {
    digitalWrite(led, LOW);
    digitalWrite(led2, HIGH);
  }

  while (50 < distance && distance < 120)
  {
    float moyenne(float tableau[], int nombreValeur)
    {
      int i = 0;
      double total = 0;
      float moyenne = 0;
      for (i = 0; i < 10; i++)
      {
        total = total + tableau[i];
      }
      moyenne = total / 10;
      int valeur0 = tableau[0];
      int valeur10 = tableau[10];
    }
  }
  if (tableau[10] < moyenne && moyenne < tableau[0])
  {
    {
      digitalWrite(led, HIGH);
      delay(500);
      digitalWrite(led, LOW);
      delay(500);
      digitalWrite(led2, LOW);
    }

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

Et comme c’est parfaitement visible maintenant il manque des accolades à la fin du code, tu te dém**dera pour les trouver toi même.

Ensuite si tu lisais les messages d’erreur au lieu de faire du mauvais esprit et te ridiculiser :

Les options de compilation ont été modifiées, tout sera recompilé
sketch_apr30a.ino: In function ‘void loop()’:
sketch_apr30a:38: error: a function-definition is not allowed here before ‘{’ token
sketch_apr30a:65: error: expected ‘}’ at end of input
sketch_apr30a:65: error: expected ‘}’ at end of input
a function-definition is not allowed here before ‘{’ token

sketch_apr30a:38: error: a function-definition is not allowed here before ‘{’ token
et que lit-on dans la zone de la ligne 38

while (50 < distance && distance < 120)
  {
    float moyenne(float tableau[], int nombreValeur)
    {
      int i = 0;
      double total = 0;
      float moyenne = 0;
      for (i = 0; i < 10; i++)

Ligne 38 :

float moyenne(float tableau[], int nombreValeur)

C’est une définition de fonction !
Depuis quand défini-t-on une fonction dans une boucle while ?
De plus cela t’avait déjà été signalé, il faut faire ton travail ?
Il serait temps d’apprendre les bases du C, plus qu’un mois avant la remise du projet.

68tjs:
Mon très, très cher lycéen ce que tu as fait ne s’appelle pas une indentation.
si tu ne connais pas ce terme regarde dans un dictionnaire.
Voici ton fichier indenté:

#define trigPin 13

#define echoPin 12
#define led 11
#define led2 10

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  //  delayMicroseconds(1000);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration / 2) / 29.1;
  if (distance < 120) {
    digitalWrite(led, HIGH);
    digitalWrite(led2, LOW);
  }
  else {
    digitalWrite(led, LOW);
    digitalWrite(led2, HIGH);
  }

while (50 < distance && distance < 120)
  {
    float moyenne(float tableau, int nombreValeur)
    {
      int i = 0;
      double total = 0;
      float moyenne = 0;
      for (i = 0; i < 10; i++)
      {
        total = total + tableau[i];
      }
      moyenne = total / 10;
      int valeur0 = tableau[0];
      int valeur10 = tableau[10];
    }
  }
  if (tableau[10] < moyenne && moyenne < tableau[0])
  {
    {
      digitalWrite(led, HIGH);
      delay(500);
      digitalWrite(led, LOW);
      delay(500);
      digitalWrite(led2, LOW);
    }

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



Et comme c'est parfaitement visible maintenant il manque des accolades à la fin du code, tu te dém**dera pour les trouver toi même.

Ensuite si tu lisais les messages d'erreur au lieu de faire du mauvais esprit et te ridiculiser :sketch_apr30a:38: error: a function-definition is not allowed here before '{' token
et que lit-on dans la zone de la ligne 38


while (50 < distance && distance < 120)
  {
    float moyenne(float tableau, int nombreValeur)
    {
      int i = 0;
      double total = 0;
      float moyenne = 0;
      for (i = 0; i < 10; i++)



Ligne 38 :


float moyenne(float tableau, int nombreValeur)



C'est une définition de fonction !
Depuis quand défini-t-on une fonction dans une boucle while ?
De plus cela t'avait déjà été signalé, il faut faire ton travail ?
Il serait temps d'apprendre les bases du C, plus qu'un mois avant la remise du projet.

Bonjour,

Tout d’abord, merci pour votre analyse détaillée de mon programme. J’ai ainsi remodelé en profondeur le code grâce à vos observations, et je suis arrivé à le compiler sans obtenir de message d’erreur.

Cordialement.