Faire allé un moteur en fonction d'un capteur ultrason

Bonjour, je suis en train d'utiliser un capteur à ultrason hc-06 et un moteur à courant continu et je voudrais que mon moteur tourne en marche avant si il n'y a rien de detecter par le capteur à -de 20cm et en marche arrière si il y a quelque chose à - de 20cm, mais j'ai un problème. donc voila mon code :

/* Utilisation du capteur Ultrason HC-SR04 */
#define A 500
#define B 300
// définition des broches utilisées 
int trig = 9; 
int echo = 10;
int motor_pin1 = 4;
int motor_pin2 = 5;
int motor_pin3 = 6;
int motor_pin4 = 7;
long lecture_echo; 
long cm;

void setup() 
{ 
  pinMode(trig, OUTPUT); 
  digitalWrite(trig, LOW); 
  pinMode(echo, INPUT);
  pinMode(motor_pin1,OUTPUT);
  pinMode(motor_pin2,OUTPUT);
  pinMode(motor_pin3,OUTPUT);
  pinMode(motor_pin4,OUTPUT);
  Serial.begin(9600);
 delay(700); 
}

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);

sauf que quand je rajoute :

  if(distance >= 20) {                 //Si il n'y a pas d'obstacle à plus de 20cm 
    digitalWrite(motor_pin1,LOW);      //Alors il avance 
    digitalWrite(motor_pin2,HIGH);
    digitalWrite(motor_pin3,HIGH);
    digitalWrite(motor_pin4,LOW);                                
  }

mon capteur ne me donne plus du tout les bonnes valeurs...

Et le moteur il est alimenté comment?

bonjour,
sans parler d’alimentation pour le moment

tu donnes un vout de code avec “cm” et non distance comme variable, donc il y a un blem.
dans ta condition

  if(distance >= 20) {                 //Si il n'y a pas d'obstacle à plus de 20cm
    digitalWrite(motor_pin1,LOW);      //Alors il avance
    digitalWrite(motor_pin2,HIGH);
    digitalWrite(motor_pin3,HIGH);
    digitalWrite(motor_pin4,LOW);                                
  }

dans ce cas, fais une fonction à part

void loop()
{
distance();
if (cm < 20){
distance();
aller en arrière
}
  digitalWrite(motor_pin1,LOW);      //Alors il avance
    digitalWrite(motor_pin2,HIGH);
    digitalWrite(motor_pin3,HIGH);
    digitalWrite(motor_pin4,LOW);    
}

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

Bien vu distance versus cm dans le test

Il va aussi y avoir un pb de logique car lorsque le capteur va mesurer 19,99cm il va reculer puis mesurer 20cm et se remettre à avancer… été osciller sans fin sur cette valeur…

oui, mais laissons le le découvrir.

il te manque se singne a la fin de ton code }

Est-ce vraiment nécessaire de rouvrir un fil de discussion vieux de 4 ans et stoppé en plein milieu par dessus le marché?