Modding:
digitalWrite(FanPin1, HIGH);
delay(18);
digitalWrite(FanPin1, LOW);
Je nach Temperatur wird das delay() halt immer länger.
Ja, und genau das ist dein Problem.
Damit das so funktioniert, wie du es möchtest, darfst du niemals "delay()" einsetzen.
Verwende dazu millis und siehe dir dazu "BlinkWithoutDelay" an.