Ich würde das ganze mit einem Timer realisieren.
Wenn der ADC dunkel erkennt wird der Timer gestartet.
Der Timer löst periodisch eine Interrupt-Routine aus in der eine Variable hochgezählt wird.
Wenn ein IR-Signal kommt wird die Variable auf 0 gesetzt und zählt erneut hoch.
Wenn die Variable einen bestimmten Wert erreicht hat (quasi den 30-Minuten-Wert) wird vom Hauptprogramm aus die "Zu-Routine" angesprungen.