La parte de instalar la interrupción no va en la rutina obtenerDistancia. Va en el programa principal que no se pedia escribir en ese problema.
- Fijate que sino cada vez que quieras obtener un distancia vas a estar reinstalando la rutina que atiende las interrupciones (ISR). Normalmente (no lo vemos en detalle en este curso) la acción de instalar una rutina de atención a interrupciones no es idempotente porque lo normal es que las ISR se encadenen (varias rutinas pueden atender distintos dispositivos asociados al mismo número de interrupción).
- Lo de poner tics en 0 antes o después del OUT no cambia sustancialmente la solución, cualquiera de las dos es correcta.
- El código puede ponerse perfectamente parte en la interrupcion del temporizador y parte en la rutina. Lo que parece estar mal en tu solución es la condición de salida
Creo que debería decir
WHILE (!encontre && tics < tics_max) { }
para que se quede en el loop hasta que se detecte el eco o de "timeout".
Saludos,
Gustavo