Problème de capteur dans le code

Bonjour à tous
Je me présente, je suis un élève de terminale S en section SI dans laquelle j'ai un projet à rendre pour le bac.

J'ai des petites bases en programmation et algorithmie, c'est pourquoi il est probable que j'ai fais des erreurs dans mon code.

Mon projet est une brosse à tableau automatique.

J'utilise:

-Une Arduino Uno avec un motor shield arduino
-Capteur Ultrason HC-SR04

Le problème est qu'avec mon programme je n'arrive pas à utiliser mon capteur dans son plein potentiel, car seule la première valeur donne une indication sur la bonne distance du capteur, les autres valeurs sont des 0.
Voilà le programme :

//              Setup

// Pins moteur: Chan B
const int M = 13; // Branchement du moteur
const int Brake_M = 8; // Frein
const int Speed_M = 11; // Vitesse

// Pins Pompe: Chan A
const int P = 12; // Branchement de la pompe ( sens )
const int Brake_P = 9; // Frein
const int Speed_P = 3; // Vitesse

// Pins capteur:
const int trig = 12;
const int echo = 11;
long lecture_echo;

// Les Constantes
const int dcd =30 ; // valeurs en cm
const int dcf =10 ;
const int vm = 255; // 
const int vp = 100;

// Les Variables
long cm;  //valeur récupérée par le capteur
int i = 1;
int f = 1;
int g = 1;

void setup()
{   // Moteurs
    pinMode(M, OUTPUT);
    pinMode(Brake_M, OUTPUT);
    pinMode(P, OUTPUT);
    pinMode(Brake_P, OUTPUT);

    // Capteur
    pinMode(trig, OUTPUT);
    digitalWrite(trig, LOW);
    pinMode(echo, INPUT);
    Serial.begin(9600); 
}
void loop()
{
 distance_capteur();
 while(f==true) // Boucle qui le fait revenir s'il n'est pas à la position de départ
 {
   if(cm<dcd)
   {
    reculer();
    distance_capteur();
   } 
   else
   {
   f=0;
   }
 }

 digitalWrite(Brake_M, HIGH);
 delay(10000); 
 imbiber();
 digitalWrite(Brake_P, HIGH); 

 while(g==true) // Avance au bout du tableau ( jusquà dcf )
 {
  if(cm>dcf)
  {
   avancer();
   distance_capteur();
  }
  else
  {
    g=0;
  }
 }
 digitalWrite(Brake_M, HIGH);
 delay(5000); // Pause de 5sec avant de revenir à la position initiale
f=1;
}



void reculer()  // Fonction reculer
{
    digitalWrite(M,LOW);
    digitalWrite(Brake_M, LOW);   //Disengage the Brake for Channel A
    analogWrite(Speed_M,vm);

}

void avancer()  // Fonction avancer 
{
    digitalWrite(M,HIGH);
    digitalWrite(Brake_M, LOW);   //Disengage the Brake for Channel A
    analogWrite(Speed_M,vm);
}

void imbiber() // Fonction imbiber
{
  
  while(i<20)  
  {
    digitalWrite(M,HIGH);
    digitalWrite(Brake_M, LOW);   //Disengage the Brake for Channel A
    analogWrite(Speed_M,vp);
    i++;
  }    
}

void distance_capteur() // Fonction Relever la distance
{
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  lecture_echo = pulseIn(echo, HIGH);
  cm = lecture_echo / 58;
  Serial.print("Distancem : ");
  Serial.println(cm);
  delay(20);
}

Voilà ce que j'ai dans la console(je fais des reset de la carte arduino pour avoir 1 seule valeur):

Distancem : 42
Distancem : 0
Distancem : 0
Distancem : 0
Distancem : 0
Distancem : 0
Distancem : 0
Distancem : 0
Distancem : 0
Distancem : 0
Distancem : 19

Alors qu'avec le programme seul du capteur, j’obtiens plusieurs valeurs par exemple:

Distancem : 40
Distancem : 39
Distancem : 39
Distancem : 37
Distancem : 35
Distancem : 34
Distancem : 30
Distancem : 28
Distancem : 28
Distancem : 26

Programme du capteur seul :

/* Utilisation du capteur Ultrason HC-SR04 */

// définition des broches utilisées
int trig = 12;
int echo = 11;
long lecture_echo;
long cm;

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

void loop()
{
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  lecture_echo = pulseIn(echo, HIGH);
  cm = lecture_echo / 58;
  Serial.print("Distancem : ");
  Serial.println(cm);
  delay(20);
}

Du coup je vous demande votre aide, merci d'avance et bonne année ! :wink:

bonjour,
aller, je parirai sur

const int Speed_M = 11; // Vitesse
const int echo = 11;

const int P = 12; // Branchement de la pompe ( sens )
const int trig = 12;

Ah ouai c'est sûr que ça doit être problématique, j'avais pas du tout penser à ça ^^ Merci beaucoup, je testerai vendredi et vous direz si ça marche :slight_smile: