aiuto per il codice

buonasera, sto realizzando un macchina evita ostacoli, tramite il sensore a ultrasuoni srf04 che rileva la distanza, in base alla distanza o va dritto o gira a sinistra, il codice sembra funzionare ma vorrei migliorarlo, cerco degli aiuti, mi è stato detto che dovrei rileggere la distanza più volte ma non ho capito... fin ora ho realizzato questo:

#define echoPin 2        //segnale echo al pin 2
#define trigPin 3        //segnale trigger al pin 3
int en1 = 11;  //enable del motore 1 al piedino 13
int en2 = 6;  //enable del motore 2 al piedino 6
int a = 13;    //segnale a del motore 1 al piedino 13
int b = 12;    //segnale b del motore 1 al piedino 12
int c = 10;     //segnale c del motore 2 al piedino 10
int d = 7;     //segnale d del motore 2 al piedino 7
int led = 5;  //segnale per lo stop

void setup() 
{
  pinMode(echoPin, INPUT);  //impostazione piedino come ingresso
  pinMode(trigPin, OUTPUT);  //impostazione piedino come uscita
  pinMode(en1, OUTPUT);  //impostazione piedino come uscita
  pinMode(en2, OUTPUT);  //impostazione piedino come uscita
  pinMode(a, OUTPUT);    //impostazione piedino come uscita
  pinMode(b, OUTPUT);    //impostazione piedino come uscita
  pinMode(c, OUTPUT);    //impostazione piedino come uscita
  pinMode(d, OUTPUT);    //impostazione piedino come uscita
  pinMode(led, OUTPUT);  //impostazione piedino come uscita
  Serial.begin(9600);    //comunicazione seriale
}

void loop()
{
  digitalWrite(trigPin, LOW);             //impostazione piediedino trig basso per 2uS
  delayMicroseconds(2);                 
  digitalWrite(trigPin, HIGH);            //impostazione piedino trig alto per 10uS
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);             //impostazione piedino trig basso
  int distanza = pulseIn(echoPin, HIGH);        //impostazione variabile per memorizzare la distanza e imposazione echo alto cronometra da quando è basso a quando è alto in uS
  distanza= distanza/58;                        // calcola la distanza dall'impulso
  Serial.println(distanza);             //stampa sul monitor seriale la distanza      
  delay(100);                           //aspetta 100 uS per la prossima lettura
if(distanza>45){
  //se la distanza dall'oggetto è maggiore di 45 vai avanti
  // motore 1 attivo, gira in senso orario - avanti
  analogWrite(en1, 100);  //egnale pwm per il controllo della velocita
  digitalWrite(a, HIGH);     
  digitalWrite(b, LOW);
  // motore 2 attivo, gira in senso orario - avanti
  analogWrite(en2, 100);  //egnale pwm per il controllo della velocita
  digitalWrite(d, LOW);
  digitalWrite(c, HIGH);
  // stop  
  digitalWrite(led, LOW);
}
if(distanza<45){
 //se la distanza dall'oggetto è minore di 45 fermo per 100uS poi gira finchè non torna maggiore di 46 cm
 digitalWrite(a, LOW); // motore 1 fermo
 digitalWrite(b, LOW); 
 digitalWrite(c,LOW);  //motore 2 fermo
 digitalWrite(d,LOW);
 delay(100);           //aspetta 100 uS
 do{
  digitalWrite(en1, HIGH);  //enable alti, motori abilitati
  digitalWrite(en2, HIGH);  
  digitalWrite(a, LOW);     //motore 1 gira in senso anti orario - indietro
  digitalWrite(b, HIGH);
  digitalWrite(d, LOW);     //motore 2 gira in senso orario - avanti
  digitalWrite(c, HIGH);
  digitalWrite(led, HIGH);  //stop acceso finchè la distanza non torna maggiore di 46 cm
 }while(distanza>46);
}
 Serial.println(distanza); 
}

Potresti iniziare con lo studiare le funzioni e successivamente magari dirci cosa vuoi migliorare....
Un bel servo con attaccato srf04? e quando incontri un ostacolo guardi a destra poi a manca e decidi dove andare?

non a livello hardware, ma software, se fosse possibile migliorare le istruzioni con qualcosa di più diciamo professionale del do-while.

perché i professionisti non usano il costrutto do/while?
Prova a suddividerlo in funzioni().