ultrasonic sensor and line follower robot

i am sorry for the bad comments in the code i just write them when i am testing

this my new code after reading your comments .. but nothing change .. he doesn't work

thank you very much for the reponse

#include <NewPing.h>
// capteur ultrasonic

#define trigPin   12  //  Pin Trigger branchée sur la broche 12 de l'arduino
#define echoPin   11  //  Pin Echo branchée sur la broche 11 de l'arduino

NewPing sonar(trigPin, echoPin);

int cm = 0; //declare une variable cm qui je l'utilise dans la comparaison 

boolean PasObstacle; 

const int distanceObstacle =10; //  Distance de détection d'un obstable : ici 10 cm
int distance = 0;

//définition des bouttons

int button1=20;  //vert 
int button=21;   //rouge
int z;
int w; 
// définition des capteur ultrason 
int cap1=3;  // cap gauche
int cap2=4;  // cap milieu
int cap3=5;  // cap milieu
int cap4=6;  // cap droite
// definition de boche de la carte de puissance 
int varmot2=9;
int av2=7;       //avant 
int ar2=8;       //arrière

int varmot1=14;
int av1=15;       //avant 
int ar1=16;

boolean a;
boolean b;//les deux capteurs au milieu 
boolean c;//les deux capteurs au milieu 
boolean d; 

boolean stope;// j'ecrit stope à la fin "e" car tt simplement lorque j'ecrit stop elle devient en rouge don je pense que c'est une fonction prédifine. 
boolean left;
boolean right;
boolean forward;
boolean backward;


void setup() {
 
  pinMode(varmot1,OUTPUT);
  pinMode(av1,OUTPUT);
  pinMode(ar1,OUTPUT);

  pinMode(varmot2,OUTPUT);
  pinMode(av2,OUTPUT);
  pinMode(ar2,OUTPUT);
  
  Serial.begin(9600);

pinMode(button,INPUT);
pinMode(button1,INPUT);

}

void loop() {
  
 a = digitalRead(cap1) ; // a recoi la valeur de cap1 (1 ou 0) 
                     
  b = digitalRead(cap2) ;// b recoi la valeur de cap2 (1 ou 0)
                    
 c = digitalRead(cap3) ;// c recoi la valeur de cap3  (1 ou 0)
                    
 d = digitalRead(cap4) ;// d recoi la valeur de cap4 (1 ou 0) 
                     

 right=(((!a)&&(d))&&(c||(!b)));  // le robot doit tourner à droite lorsque la condition est vrai c'est à dire ( le capteur à droite est en noir OU bien le capteur droite ET le milieu en noir )

 left=((a&&(!d))&&(b||(!c)));   // le robot doit tourner à gauche lorsque la condition est vrai c'est à dire ( le capteur à gauche est en noir OU bien le capteur gauche ET le milieu  en noir )

 backward=(((!a)&&(!c))&&((!b)&&(!d))); // le robot doit étre marche en arriére lorsque il sort de map c'est à dire les 4 capteur en blanc      
 
 forward=((!a)&&(b)&&(c)&&(!d)); // le robot doit étre marche en avant lorsque le 2 capteur au milieu est en noir      
 
 stope=(a&&b&&c&&d);// le robot fait un stop lorsque les 4 capteur en noir 
 
 lecture ();// fonction pour just affichier le valeur des capteur en moniteur série 

   distance =  mesureDistance();  // on lit la valeur en cm

if (PasObstacle)  {
  
  z=digitalRead(20);
 w=digitalRead(21);
 
 if ((stope)&&(w==1)) // si le robot est en stop est on appui sue le bouton rouge il tourne droite
{
  droite (); 
  delay(500);
}
else if ((stope)&&(z==1))  // si le robot est en stop est on appui sue le bouton vert rouge il marche avant 
{
avant();
delay(500);
  }
  
  if (left)
  
   {
    gauche () ;          
   }
   
  else if (right)
  
    {
      droite();
    }
  
  else if (forward)
  
   {  
    avant(); 
   }
  
 else if (backward)
  
   {
    arrier ();
   }
    
  else if (stope)
{
  stopp();}
}
  else
  {
    stopp();}
  }
unsigned int mesureDistance() { // fonctin pour comparer la distance calculé avec la distanceobstacle

  int  cm = sonar.ping_cm();


  if (cm > distanceObstacle) {
    PasObstacle =  true;  // on renvoie true s'il n'y pas d'obstacle
  }
  else  {
    PasObstacle = false;  // on renvoie false s'il y a un obstacle
  }

  return cm; // retourne la distance du capteur en cm

}

void lecture ()
 {
    Serial.print(a);
    Serial.print(b);
    Serial.print(c);
    Serial.println(d);

  }


void gauche ()
  {
    analogWrite(varmot1,100);
    digitalWrite(av1,0);
    digitalWrite(ar1,0);
    analogWrite(varmot2,255);
    digitalWrite(av2,1);
    digitalWrite(ar2,0);
    
  }
void droite () 
 {
    analogWrite(varmot1,255);
    digitalWrite(av1,1);
    digitalWrite(ar1,0);
  analogWrite(varmot2,100);
    digitalWrite(av2,0);
    digitalWrite(ar2,0);
 }
  
void avant () 

  {
    analogWrite(varmot1,250);
    digitalWrite(av2,HIGH);
    digitalWrite(ar2,LOW);
    analogWrite(varmot2,250);
    digitalWrite(av1,1);
    digitalWrite(ar1,0);
  }
void arrier () 
  {
    analogWrite(varmot1,150);
    digitalWrite(av2,LOW);
    digitalWrite(ar2,HIGH);
    analogWrite(varmot2,150);
    digitalWrite(av1,0);
    digitalWrite(ar1,1);
  }

void stopp ()
  {
    digitalWrite(av1,LOW);
    digitalWrite(ar1,LOW);
    digitalWrite(av2,LOW);
    digitalWrite(ar2,LOW);    
    }