La solución remueve los autos ante cualquiera de esas dos condiciones! El tema de la doble multa lo hace de forma muy "pizarrera" sacando de a uno los bits de las infracciones:
autos[i].ocupado &= ~CHK_LUZ;
Fijate que ahí CHK_LUZ es 1000 0000 y luego al negarlo queda 0111 1111 y haciendo and con eso apaga el bit más significativo.
Más abajo en el timer, si la posición dio 0 es porque el auto se fue de rango del radar y también lo quita.
Saludos,
Federico
autos[i].ocupado &= ~CHK_LUZ;
Fijate que ahí CHK_LUZ es 1000 0000 y luego al negarlo queda 0111 1111 y haciendo and con eso apaga el bit más significativo.
Más abajo en el timer, si la posición dio 0 es porque el auto se fue de rango del radar y también lo quita.
Saludos,
Federico