Sensor HCSR 04

Bem, Estou desenvolvendo um robô para uma competição nacional, ele deve seguir uma linha preta no chão, usamos o sensor de refletancia QRE - Analogico.
O problema esta em uma linha da programação na parte do ultrassonico : long microsec = ultrasonic.timing();

//quanto menor o valor, mais luz infravermelha chega ao sensor, portanto está no branco
//quanto maior o valor, menos luz infraverm. chega ao sensor, portanto está no preto

#include <Ultrasonic.h>
#define echoPin 13
#define trigPin 12

Ultrasonic ultrasonic(12, 13);
int sensorLinhaDir = A1;
int sensorLinhaEsq = A2;
int sensorCantoEsq = A0;
int sensorCantoDir = A3;

int S7 = A7;// sensor obstaculo
int valorsensorobs = 0;
int valorcorteobs = 50;
int S13 = 13;
int val = 0;
int distancia = 0;
int disdir= 0;
int disesq = 0;

int ValorCorte = 950;

//Standard PWM DC control
int E1 = 5; //M1 Speed Control
int E2 = 6; //M2 Speed Control
int M1 = 4; //M1 Direction Control //motores da direita
int M2 = 7; //M1 Direction Control //motores da esquerda

const int velocidade = 180;

int valorLinhaEsq, valorLinhaDir, valorCantoEsq, valorCantoDir = 0; // variable to store the value coming from the sensor

void setup() {

pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);

}

void loop() {

float cmMsec, inMsec;
long microsec = ultrasonic.timing();

cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
Serial.print("MS: ");
Serial.print(microsec);
Serial.print(", CM: ");
Serial.print(cmMsec);
delay(100);

valorLinhaEsq = analogRead(sensorLinhaEsq);
valorLinhaDir = analogRead(sensorLinhaDir);
valorCantoEsq = analogRead(sensorCantoEsq);
valorCantoDir = analogRead(sensorCantoDir);

if ((cmMsec > 20))
{

digitalWrite (dir1,LOW); //VELOCIDADE
digitalWrite (M2,LOW);
analogWrite (E1,velocidade2); //SENTIDO DE ROTAÇÃO
analogWrite (E2,velocidade2);
delay(200);
}

if ((cmMsec <= 20))
//indo para direita
{
digitalWrite (M1,HIGH); //VELOCIDADE
digitalWrite (M2,LOW);
analogWrite (E1,0); //SENTIDO DE ROTAÇÃO
analogWrite (E2,0);
delay(500);
}

else{
if((valorLinhaEsq > ValorCorte)&&(valorLinhaDir > ValorCorte)){
analogWrite (E1,velocidade); //VELOCIDADE
analogWrite (E2,velocidade); //VELOCIDADE
digitalWrite(M1,LOW); //SENTIDO DE ROTACAO
digitalWrite(M2,LOW); //SENTIDO DE ROTACAO
}

if((valorLinhaEsq < ValorCorte)&&(valorLinhaDir > ValorCorte)){
analogWrite (E1,velocidade); //CURVA PARA DIREITA
analogWrite (E2,velocidade);
digitalWrite(M1,HIGH);
digitalWrite(M2,LOW);
}
if((valorLinhaEsq > ValorCorte)&&(valorLinhaDir < ValorCorte)){
analogWrite (E1,velocidade); // CURVA PARA ESQUERDA
analogWrite (E2,velocidade);
digitalWrite(M1,LOW);
digitalWrite(M2,HIGH);
}
}

/* if((valorLinhaEsq > ValorCorte)&&(valorLinhaDir > ValorCorte)
&&(valorCantoEsq > ValorCorte)&&(valorCantoDir > ValorCorte)){
digitalWrite(M1,LOW); //SENTIDO DE ROTACAO
digitalWrite(M2,HIGH); //SENTIDO DE ROTACAO
analogWrite (E1,velocidade); //VELOCIDADE
analogWrite (E2,velocidade); //VELOCIDADE
delay(100);
}*/

}

Com um post desta forma não é muito fácil ajudar. Repare que nem se deu ao trabalho de ler as regras do fórum e postar o código de forma correcta.

Qual é exactamente o problema com essa linha de programação? O que faz o robô e o que deveria fazer?

PS.: Uma vez que coloca aqui código para outros entenderem, não acha que o deveria colocar na sua forma final? (Estou a ver pelo menos um bloco de código comentado. Deveria ser incluído no código final? Já foi excluído do projecto há algum tempo e não deve ser considerado? É neste bloco que está o problema que o traz aqui?)