Problema con controllore serra

Ho modificato così ma quando la lampada è spenta il controllo umidità non funziona, se inserisco il controllo umidità nel loop si spegne la ventola anche quando la luce è accesa. I miei 3 stati sono:

  • Luce Accesa - Ventola Accesa
  • Luce Spenta - Ventola Spenta (se h<49)
  • Luce Spenta - Ventola Accesa (se h>52)

Poi persiste ancora il problema dello scorrimento dei secondi che sono sfasati, in più Arduino (a cui ho collegato un RTC DS1307) perde l'ora, cioè solitamente dopo una settimana si spunta (avanti solitamente di 5 minuti)

DateTime now = RTC.now();
  int nowHourMinute = now.hour()*100 + now.minute(); 
  int h2 = dht.readHumidity();
  // FSM states
  switch(lightState) {

  case STATE_OFF:
    if(nowHourMinute > START_TIME && nowHourMinute < END_TIME) {
      Serial.print(now.hour(), DEC);
      Serial.print(':');
      Serial.print(now.minute(), DEC);
      digitalWrite(lightRelay, HIGH);
      digitalWrite(fanRelay, HIGH);
      Serial.println("Fan On");
      FanState = STATE_ON;
      lcd.setCursor(10,3);
      lcd.print("Fan ON");
      lcd.setCursor(0,3);
      lcd.print("Light ON");
      lightState = STATE_ON;

    }
    break;

  case STATE_ON:
    if(nowHourMinute > END_TIME) {
      Serial.print(now.hour(), DEC);
      Serial.print(':');
      Serial.print(now.minute(), DEC);       
      digitalWrite(lightRelay, LOW);
      if (h2>51.00){
        digitalWrite(fanRelay, HIGH);
        lcd.setCursor(10,3);
        lcd.print("Fan ON");
      }
      if (h2<49.00){
        digitalWrite(fanRelay, LOW);
        lcd.setCursor(10,3);
        lcd.print("      ");
      }
      lcd.setCursor(0,3);
      lcd.print("        ");
      lightState = STATE_OFF;

    }    
    break;
  }