if che non viene elaborato correttamente

Attenzione alle logiche negli if con i controlli sugli orari. Essi sono condizioni particolari da controllare.
L'esempio di willy non è particolarmente complicato perché deve accendere dalle 6:00 alle 12:00 ma se doveva accendere dalle 6:00 alle 10:10 il suo controllo non funziona.

se (6 >= 6 e 28 >= 0) e (6 <= 11 e  28 <= 10)

Vedete che nella seconda condizione, 28 non può essere minore o uguale a 10.
Io consiglio sempre di separare i 2 test, quelli sulle ore e quelli sui minuti. Prima si controlla se le ore sono comprese nell'intervallo e poi si controllano i minuti:

if ((ore >= orarioInizio) && (ore <= orarioFine)) {
  if ((minuti >= minutiInizio) && (minuti <= minutiFine)) {
    ....
  }
}

Un'alternativa è quella di convertire l'orario nell'elemento più piccolo. Ad esempio se si deve fare un controllo su ore:minuti si trasforma tutto in minuti prima del check, usando poi un solo if. Esempio:

orario = (ore*60) + minuti
if (orario >= orarioInizio) && (orario <=orarioFine)) {
  ..
}

Se si usano anche i secondi:

orario = (ore*3600) + (minuti*60) + secondi
if (orario >= orarioInizio) && (orario <=orarioFine)) {
  ..
}

Ovviamente orarioInizio e orarioFine sono anch'essi calcolati con la stessa unità di misura.