robot y seguidor solar

Buenos días.
He hecho un robot que basicamente solo hace que pasearse y esquivar obstaculos, pero encima lleva un seguidor solar independiente. Al tener que buscar la luz independientemente de la posición del robot, no usé un servo para su movimiento horizontal, si no un motor DC controlado por un L298N.
Ahora bien. hay un problema. Cuando detecta la luz y la tiene mas o menos centrada, el motor debería pararse hasta que la luz se mueva un poco hacia un lado, y no lo hace. no consigo que quede parado dentro de un margen que le he dado.
Pongo el código a ver si podeis echarme una mano.

 #include <Servo.h> // libreria para los servo motores 
/*
// 180 horizontal MAXIMO
Servo horizontal; // declaramos el valor para el servo horizontal
int servoh = 180;        

int servohLimitHigh = 180; //limite en posicion superior
int servohLimitLow = 65; //limite para posicion inferior

*/
Servo vertical;   // vertical servo 
  
int servoReposo = 45;  // grados a los que se inicia el servo 
int servovLimiteSuperior = 60;  // limite de grados a los que subirá el servo
int servovLimiteInferior = 15;  // límite de grados a los que bajará en servo

int ldrIzqSup = 2; // conexion a las resistencias LDR Izquierda arriba
int ldrDrchSup = 3; // conexion a las resistencias LDR derecha arriba
int ldrIzqInf = 0; // conexion a las resistencias LDR izquierda abajo
int ldrDrchInf = 1; // conexion a las resistencias LDR izquierda abajo  1023

//motor horizontal. pines
int ENA = 6;
int IN1 = 5;
int IN2 = 4;

void setup()
{

 pinMode (ENA, OUTPUT);
 pinMode (IN1, OUTPUT);
 pinMode (IN2, OUTPUT);
 
  Serial.begin(9600);
  vertical.attach(10); // servo vertical pin digital 10
  vertical.write(45);
  delay(3000);
}

void loop() 
{
  int valorIZQarriba = analogRead(ldrIzqSup); // top left (superior izquierdo)
  int valorDRCHarriba = analogRead(ldrDrchSup); // top right (superior derecho)
  int valorIZQabajo = analogRead(ldrIzqInf); // down left (inferior izquierdo)
  int valorDRCHabajo = analogRead(ldrDrchInf); // down rigt (inferior derecho)
  
  // int dtime = analogRead(4)/20; // Opcional si utilizamos potenciometros para la velocidad 
  // int tol = analogRead(5)/4;
  int dtime = 10;  //velocidad
  int tolerancia = 50; //tolerancia en la medición de la resistencia de los LDR
  int tolerancia_motor = 50;
  
  int avARRIBA = (valorIZQarriba + valorDRCHarriba) / 2; // valor superior maximo
  int avABAJO = (valorIZQabajo + valorDRCHabajo) / 2; // valor inferior maximo
  int avIZQ = (valorIZQarriba + valorIZQabajo) / 2; // valor izquierdo maximo
  int avDRCH = (valorDRCHarriba + valorDRCHabajo) / 2; // valor derecho maximo


  int difVERT = avARRIBA - avABAJO; // diferencia entre superior e inferior
  int difHORIZON = avIZQ - avDRCH;// diferencia entre izquierdo y derecho


  
  Serial.print(avARRIBA);   // Imnprimir valores  de posicion en monitor serial
  Serial.print(" ");
  Serial.print(avABAJO);
  Serial.print(" ");
  Serial.print(avIZQ);
  Serial.print(" ");
  Serial.print(avDRCH);
  Serial.print("   ");
  Serial.print(dtime);
  Serial.print("   ");
  Serial.print(tolerancia);
    Serial.print("   ");
  Serial.print(difHORIZON);
      Serial.print("   ");
  Serial.print(valorIZQarriba);
      Serial.print("   ");
  Serial.print(valorDRCHarriba);
      Serial.print("   ");
  Serial.print(valorIZQabajo);
      Serial.print("   ");
  Serial.print(valorDRCHabajo);
  Serial.println(" ");
  
    
  if (-1*tolerancia > difVERT || difVERT > tolerancia) // revisar la diferencia para cambiar al angulo vertical
  {
  if (avARRIBA < avABAJO)
  {
    servoReposo = ++servoReposo;
     if (servoReposo > servovLimiteSuperior) 
     { 
      servoReposo = servovLimiteSuperior;
     }
  }
  else if (avARRIBA > avABAJO)
  {
    servoReposo= --servoReposo;
    if (servoReposo < servovLimiteInferior)
  {
    servoReposo = servovLimiteInferior;
  }
  }
  vertical.write(servoReposo);
  }


   // aqui empieza el movimiento del motor
  if (-1*tolerancia_motor > difHORIZON || difHORIZON > tolerancia_motor) // revisar la diferencia para cambiar al angulo horizontal
  {
  if (avIZQ > avDRCH){
              motor_izquierda();
   }else if (avIZQ < avDRCH){
     motor_derecha();
  }else if (avIZQ = avDRCH){
   
  }
  }
   delay(dtime);
}


void motor_derecha ()  // motor dc
{
 //Direccion motor A
 digitalWrite (IN1, HIGH);
 digitalWrite (IN2, LOW);
 analogWrite (ENA, 100); //Velocidad motor A
}

void motor_izquierda ()    // motor dc
{
 //Direccion motor A
 digitalWrite (IN1, LOW);
 digitalWrite (IN2, HIGH);
 analogWrite (ENA, 100); //Velocidad motor A
  
}

void Parar ()
{
 //Direccion motor A
 digitalWrite (IN1, LOW);
 digitalWrite (IN2, LOW);
 analogWrite (ENA, 0); //Velocidad motor A
 }

El seguidor solar está basado en este proyecto:

Un saludo y gracias de ante mano

El problema creo debe estar aqui:

// aqui empieza el movimiento del motor
  if (-1*tolerancia_motor > difHORIZON || difHORIZON > tolerancia_motor) // revisar la diferencia para cambiar al angulo horizontal
  {
  if (avIZQ > avDRCH){
              motor_izquierda();
   }else if (avIZQ < avDRCH){
     motor_derecha();
  }else if (avIZQ = avDRCH){
   
  }
  }
   delay(dtime);
}


void motor_derecha ()  // motor dc
{
 //Direccion motor A
 digitalWrite (IN1, HIGH);
 digitalWrite (IN2, LOW);
 analogWrite (ENA, 100); //Velocidad motor A
}

void motor_izquierda ()    // motor dc
{
 //Direccion motor A
 digitalWrite (IN1, LOW);
 digitalWrite (IN2, HIGH);
 analogWrite (ENA, 100); //Velocidad motor A
 
}

void Parar ()
{
 //Direccion motor A
 digitalWrite (IN1, LOW);
 digitalWrite (IN2, LOW);
 analogWrite (ENA, 0); //Velocidad motor A
 }

Cuando usas la funcion parar() ?

Muevo esto a software, no es consulta para Proyectos

En su momento puse la función parar() aqui:

  if (-1*tolerancia_motor > difHORIZON || difHORIZON > tolerancia_motor) // revisar la diferencia para cambiar al angulo horizontal
  {
  if (avIZQ > avDRCH){
              motor_izquierda();
   }else if (avIZQ < avDRCH){
     motor_derecha();
  }else if (avIZQ = avDRCH){
   parar();
  }
  }

Pero ni caso me hacía.