Hola Diego!
En general los ejercicios de interrupciones se pueden resolver con la lógica en las interrupciones, en el main, o una combinación de ambos. En ese sentido, la variable se podría usar como la escribiste ahí.
Ahora, ese código tiene algún que otro problema y está relacionado con cómo actualizás las banderas. Por ejemplo, si están las luces prendidas (estado ENCENDIDAS) y alguien presiona el botón, la variable encendida pasa a valer 1 y luego no se vuelve a setear en 0. El programa va a quedar ejecutando tics = 0 en cada iteración porque la variable encendida sigue valiendo 1. El código tendría que ser:
if (encendida){
tics = 0;
encendida = 0;
}
Este es un patrón bastante común cuando tenés la lógica en el main. Si lo que querés es que las interrupciones disparen la ejecución de cierto código una única vez, ese código debe apagar la bandera luego de ejecutar.
De forma similar, si estás en el estado APAGADAS y se presiona el botón, también deberías poner tics = 0 dentro del if (encendida) { }, ya que tics podría tener un valor grande (en particular mayor a 45), lo cual va a causar que al pasar al estado ENCENDIDAS, inmediatamente se ingrese a la condición if (tics > 45) y se vuelva al estado APAGADAS.
Por favor revisá esos dos puntos y avisame si algo no se entiende.
Saludos,
Federico