Calcolare il tempo tra due eventi

Con la trasmissione seriale nella ISR si può ruotare solo lentamente (sempre che si possa usare la seriale), poi si possono perdere passi (una volta riempito il buffer di 64 byte la Serial diventa bloccante). Mi sembra ci sia una ridondanza di variabili, direi che è sufficiente questo:

void CLKChanged()
{
    byte clwise = digitalRead(encoderCLK) == digitalRead(encoderDT); 
    encoderCount += (clwise << 1) - 1;
}

Dopo di che si può misurare il tempo (la variabile first permette di iniziare a calcolare il tempo dal secondo change in senso orario in poi):

void CLKChanged()
{
    byte clwise = digitalRead(encoderCLK) == digitalRead(encoderDT); 
    if(clwise)
    {
        encoderCount++;
        if(first) { first = false;  tA = micros(); }
        else      { tB = tA;  tA = micros();  diff = tA - tB; }
    }
    else
    {
        encoderCount--;
        first = true;
    }
}