Contador de tiempo al presionar un botón del teclado

Buenas, me gustaría realizar un contador que inicie cuando presiono un botón del teclado y finalice cuando presione otro botón. La finalidad es obtener el tiempo de movimiento de un carro controlado por bluetooth.

He estado intentando con la función pulseIn(), pero solo obtengo 0 en el puerto serial.

Probé con esté otro código que vi por acá, pero no me imprimía nada por el puerto serial.

void loop() {
estadoboton1 = digitalRead(boton1);
if(estadoboton1 == HIGH) { 
tiempo=millis();
    while(estadoboton1 == HIGH) { 
tiempo2=millis();
estadoboton1 = digitalRead(boton1);

}
tiempo3=tiempo2-tiempo;

Serial.println(tiempo3);
if(tiempo3<1000 ){
Serial.println("mola"); 
}
else{ Serial.println("no mola"); }
}
}

Y este es el código que tengo ahorita.

int Led13 = 13;
int Led12 = 12;
char dato;
unsigned long duracion;

void setup() {
  pinMode(Led13, OUTPUT);
  pinMode(Led12, INPUT);
  Serial.begin(9600);
}

void loop() 
{
  carro();
  posicion();
}

void posicion()
{
  duracion = pulseIn(Led12, HIGH);
  Serial.println(duracion / 1000000); //en segundos
}

void carro()
{
  if(Serial.available()> 0){
    dato = Serial.read();
  }
    if(dato=='w'){
      digitalWrite(Led13, HIGH);
      digitalRead(Led12);
      //Serial.println("adelante");
    }
    if(dato=='s'){
      digitalWrite(Led13, LOW);
      digitalRead(Led12);
      //Serial.println("alto");
    }
    if(dato=='a'){
      digitalWrite(Led13, HIGH);
      digitalRead(Led12);
      //Serial.println("izquierda");
    }
    if(dato=='d'){
      digitalWrite(Led13, HIGH);
      digitalRead(Led12);
      //Serial.println("derecha");
    }
    if(dato=='r'){
      digitalWrite(Led13, HIGH);
      digitalRead(Led12);
      //Serial.println("atras");
    }
}

El primer código lo use en un proyecto y me funciona bien, pero solo cuenta el tiempo que tienes presionado un botón hasta que lo sueltas y no hasta que presiones otro botón, pero eso creo que lo podrías arreglar cambiando

while(estadoboton1 == HIGH);

por

while(estadoboton2 == LOW);

El pulsein no te lo recomiendo, lo probé una vez y es muy errático, deberías tener 0 rebote para que funcione.

Muchas gracias, ahi me ayudé con tu consejo y dejé de lado el pulseIn. Y lo logré con el primer código, era algo simple pero pues en el momento yo ya estaba bloqueado jaja

Acá dejo el código la parte del código ya funcionando.

int Led13 = 13;
char dato;

int estadoLed13;
unsigned long tiempo1;
unsigned long tiempo2;
float tiempo3;

void setup() {
  pinMode(Led13, OUTPUT);
  Serial.begin(9600);
}

void loop() 
{
  carro();
  tiempo();
}

void tiempo()
{
  estadoLed13 = digitalRead(Led13);
  if(estadoLed13 == HIGH) {
    tiempo1=millis();
    tiempo3=tiempo1-tiempo2;
  }
  if(estadoLed13 == LOW) {
    tiempo2=millis();
    Serial.println(tiempo3/1000);
  }
}

void carro()
{
  if(Serial.available()> 0){
    dato = Serial.read();
  }
    if(dato=='w'){
      digitalWrite(Led13, HIGH);
      //Serial.println("adelante");
    }
    if(dato=='s'){
      digitalWrite(Led13, LOW);
      //Serial.println("alto");
    }
    if(dato=='a'){
      digitalWrite(Led13, HIGH);
      //Serial.println("izquierda");
    }
    if(dato=='d'){
      digitalWrite(Led13, HIGH);
      //Serial.println("derecha");
    }
    if(dato=='r'){
      digitalWrite(Led13, HIGH);
      //Serial.println("atras");
    }
}