Buenas,
Tengo una duda respecto a la solución de este ejercicio, puntualmente en la rutina de atención a la interrupción timer(), cuando se define m_power:
char m_power = v_obj < vi? 1 : 0;
Por qué esta condición determina el estado del motor? la condición podría tomar el valor off cuando se pasa de una velocidad menor a una mayor, por ejemplo:
si en el instante de tiempo n los valores son v_obj = 7 y vi = 7,1 y el usuario aumenta la velocidad a 11 con el botón correspondiente, podría llegar a ocurrir que en el siguiente instante de tiempo (n+1) v_obj = 11 y vi sea menor a v_obj, pues la cinta demora un tiempo en alcanzar la velocidad objetivo según la letra, y esto provocaría, según la condición citada, que el motor figure como apagado.
Además, de la siguiente sentencia:
if (v_obj - TOL_DEC < vi && vi < v_obj + TOL_DEC)
se desprende que vi puede ser menor que v_obj, y esto no necesariamente significa que el motor esté apagado, sino que vi puede tomar un valor aproximado de v_obj tanto por encima de este como por debajo.
Gracias!