Ayuda, seguidor de linea

Buenas noches :smiley: este es mi primer proyecto, es un seguidor de lineas negras con fondo blanco y que adem√°s tiene que dar la distancia recorrida.

El carrito sigue perfectamente el camino, ahora tengo problemas con la distacia. Lo que estoy intentando es hacer es tomar el tiempo que esta avanzado(solo tomo el tiempo en que el carro esta en el camino correcto, pues cuando da alguna vuelta gira sobre su propio eje y no avanza, lo estoy intentando con millis) y sabiendo su velocidad aplico la fórmula Vel=Dist*Tiempo.

Con lo que tengo el problema es para tomar el tiempo en que esta avanzado, a continuacion pego el codigo, borre unas cosas irrelevantes para no ocupar mucho espacio :stuck_out_tongue:

unsigned long TimeT=0;
unsigned long TimeEntrada=0;

void setup() {

Serial.begin(9600);

}
void loop () {

unsigned long TimeAhora = millis();

int velIZQ = 105;
int velDER = 100;

//Lectura de los sensores reflectores opticos
int vQrdIZQ = analogRead(sQrdIZQ);
int vQrdDER = analogRead(sQrdDER);

// Avance, si los sensores leen ‚Äúblanco‚ÄĚ avanzara derecho, este es el tiempo que quiero tomar
if( vQrdIZQ<700 && vQrdDER<600){

** TimeEntrada=TimeAhora; //Guarda el tiempo en que empezó a avanzar**

//comandos para que avance
digitalWrite(IN1IZQ, LOW);
digitalWrite(IN2IZQ, HIGH);
analogWrite(pwmDER, velDER);
digitalWrite(IN3DER, HIGH);
digitalWrite(IN4DER, LOW);
analogWrite(pwmIZQ, velIZQ);

//se vuelven a leer los sensores
int vQrdIZQ = analogRead(sQrdIZQ);
int vQrdDER = analogRead(sQrdDER);

TimeT=(TimeT)+(TimeAhora-TimeEntrada); // tiempo total es igual al tiempo total + (el tiempo de ahora menos el tiempo en que entro al if)

}

// Vuelta derecha, si el sensor de la derecha lee negro,el carro necesitara dar vuelta a la derecha
if( vQrdIZQ<700 && vQrdDER>600){

// cambios de velocidad para que pueda dar bien las vueltas
velIZQ=velIZQ+50;
velDER=velDER+50;

digitalWrite(IN1IZQ, LOW);
digitalWrite(IN2IZQ, HIGH);
analogWrite(pwmDER, velDER);
digitalWrite(IN3DER, LOW);
digitalWrite(IN4DER, HIGH);
analogWrite(pwmIZQ, velIZQ);

//se vuelven a leer los sensores
int vQrdIZQ = analogRead(sQrdIZQ);
int vQrdDER = analogRead(sQrdDER);
int vHerIZQ = analogRead(sHerIZQ);
int vHerDER = analogRead(sHerDER);

}

// Vuelta izquierda
if( vQrdIZQ>700 && vQrdDER<600){

velDER=velDER+50;
velIZQ=velIZQ+50;

digitalWrite(IN1IZQ, HIGH);
digitalWrite(IN2IZQ, LOW);
analogWrite(pwmDER, velDER);
digitalWrite(IN3DER, HIGH);
digitalWrite(IN4DER, LOW);
analogWrite(pwmIZQ, velIZQ);

int vQrdIZQ = analogRead(sQrdIZQ);
int vQrdDER = analogRead(sQrdDER);
int vHerIZQ = analogRead(sHerIZQ);
int vHerDER = analogRead(sHerDER);

}

// Stop, al entrar a esta decisión quiere decir que terminó su recorrido
if( vQrdIZQ>700 && vQrdDER>600){
digitalWrite(IN1IZQ, LOW);
digitalWrite(IN2IZQ, LOW);
analogWrite(pwmDER, velDER);
digitalWrite(IN3DER, LOW);
digitalWrite(IN4DER, LOW);
analogWrite(pwmIZQ,velIZQ);

//como ya termino su recorrido, aqui quiero imprimir el tiempo que estuvo en "avance"
** unsigned long Time=TimeT/1000; //el tiempo que estuvo avanzando en segundos**
** Serial.println(Time);**
** delay(1000);**
}
}

En negrits esta lo que tiene que ver con la toma del tiempo, el problema es que cuando termina su recorrido lo conecto a la pc y en el serial me imprime 0 :confused:

Saludos y gracias de antemano.

PD: Otra opcion seria utilizar un encoder, como podria utilizar esto?

…
void loop () {
unsigned long TimeAhora = millis(); // Almacenas valor milis para controlar pongamos un valor 1234 :stuck_out_tongue:
…
if( vQrdIZQ<700 && vQrdDER<600){
TimeEntrada=TimeAhora; //Guarda el tiempo en que empezó a avanzar, ahora TimeEntrada también vale 1234 :grin:
…
TimeT=(TimeT)+(TimeAhora-TimeEntrada); // tiempo total es igual al tiempo total 0 en un principio + (1234-1234) :roll_eyes:

Que tonto xD entonces Time entrada debe ser igual a millis() no? :blush:

asi tendria mas sentido, pero no se si hace lo que quieres

buenas

una ayuda porfavor

estoy haciendo un carro seguidor de linea con qtr8c pero nada que lo puedo lograr alguien que me ayude