robot débutant code pour infrarouge

bonjour à tous, je m'apelle Stephane j'ai 26 ans et je début tout juste avec ardruino uno pour de la robotique amateur,

je viens de finir mon premier Robot que j'ai réalisé avec un tuto (Tutoriel simple d'un robot Arduino)

La chassie est monté sur deux étages( le 1er avec les moteurs et la platine, le 2eme avec l'adruino), il a été découper dans du plexiglas et affiner à la dremel!
le programme du tuto marche super et j'ai vraiment appris sur le langage adruino!! le robot comporte de microruteurs devant 2 servomoteurs pour la propulsion et un capteur infrarouge, le but du robot est déviter les objets

voici le code de la programmation:

#include <Servo.h>
 
#define AVANT 1
#define ARRIERE 0
#define GAUCHE 2
#define DROITE 3
 
#define SERVOG 1
#define SERVOD 0
 
#define UPDDG 3
#define UPDDD 4
 
#define SHARP 4
 
#define VMAX 5
 
Servo servog;
Servo servod;
 
int vLdr = 5;
 
int getNeutral(int s)
{
  if(s == SERVOG)
    return 86;
  else
    return 84;
}
 
 
void handleS(int s, int speed)
{
  //Vitesse :
  // 0 -> 0; 1 -> 1; 2 -> 3; 3 -> 8; 4 -> 10; v => 5 -> 30
  int tab[6] = {0,1,3,8,10,30};
  int pos = getNeutral(s);
 
  int acc;
  if (speed < 0)
    acc = - tab[abs(speed)];
  else
    acc = tab[speed];
   
  if(s == SERVOG)
      servog.write(pos += acc);
  else
      servod.write(pos -= acc);
}
 
 
void move(int direction)
{
  int m1 = 0, m2 = 0;
  switch(direction)
  {
    case DROITE: m1 = 1; m2 = -1; break;
    case GAUCHE: m1 = -1; m2 = 1; break;
    case AVANT: m1 = 1; m2 = 1; break;
    case ARRIERE: m1 = -1; m2 = -1; break;
  }
  handleS(SERVOG, m1*VMAX);
  handleS(SERVOD, m2*VMAX);  
}  
 
void handleUPDD(int updd)
{
  if(digitalRead(updd) == HIGH)
  {
    move(ARRIERE);
    delay(500);
   
    if (updd == UPDDG)
    {
      move(DROITE);
    }
    else
    {
      move(GAUCHE);
    }
     delay(800);
  }
}
 
void sharp()
{
   int v =  analogRead(SHARP);
      if (v >= 180)
      {
        move(ARRIERE);
        delay(300);
        move(DROITE);
        delay(900);
      }
      else if (v >= 100)
      {
        handleS(SERVOG, VMAX);
        handleS(SERVOD, 0);
        delay(1500);
      }
}
void setup()
{
  pinMode(UPDDG, INPUT);  
  pinMode(UPDDD, INPUT);
 
  Serial.begin(9600);
  servog.attach(10);
  servod.attach(9);
  move(AVANT);
}
 
void loop()
{
     handleUPDD(UPDDG);
     handleUPDD(UPDDD);
     sharp();
     move(AVANT);
    delay(100);
}

j'ai en plus rajouté un mini-servomoteur pour faire une tête avec le capteur infrarouge!
donc la tête est branché sur le pin 8 de l'adruino.
Maintenant je me dis que si la tête bouge il peut prendre la décision d'aller la ou les d'obstacles sont le plus loin, je m'explique:

il roule, il détecte un obstacle en face de lui, il fait un balayage à droite et à gauche, pour voir ou il n'y a pas d'obstacle, puis il prend cette direction ... etc

au niveau du code je suis complètement pommé !!! J'ai bidouillé pas mâle de temps rien ne donne suite ! pouvez vous m'aidé pour trouver le bon code ?
merci a bientôt!