En el examen de febrero 2020, problema 2 de interrupciones la letra dice:
- Para cambiar el sentido de giro del motor, primero se debe detener el motor y luego encenderlo
con el nuevo sentido.
- Cada vez que el motor es detenido se debe esperar 5 minutos antes de volver a activarlo
Ahora, usando la solución oficial y la siguiente secuencia de eventos, me surge la duda si el codigo es correcto:
0. Inicialmente la compuerta se encuentra cerrada y el motor apagado.
1. Llega un pedido para aumentar la potencia
1.1 El pedido es atendido por la rutina`potencia_solicitada`. Esta, lo que hace es setear la variable `estado = ABRIENDO;`
1.2 Luego, el `while(true)` del `main` entra en el case del `ABRIENDO`, `tics` se encuentra en 0, no se cumple el `if` por lo que se entra en el `else`, y aqui se abre la compuerta (se enciende el motor con sentido hacia arriba) y la variable `cerrada` se setea en `false`
2. Ahora supongamos que *antes* de que la represa alcance la potencia solicitada en el punto 1 llega un pedido de decrementar la potencia por debajo del nivel actual.
2.1 El pedido es atendido por la rutina`potencia_solicitada`. Esta, lo que hace es setear la variable `estado = CERRANDO;`
2.2 Luego, el `while(true)` del `main` entra en el case del `CERRANDO`, `tics` se encuentra en 0 por lo que entra en el primer`if`, la potencia solicitada es menor que el reportado por el sensor y la compuerta claramente no esta cerrada por lo que entra en el `else`. Acto seguido se cierra la compuerta.
Notar que se esta cambiando el sentido del motor sin siquiera haberlo:
1. apagado antes
2. esperado 5 minutos antes de volver a prenderlo
Es mi razonamiento incorrecto?