Temporizador

HOLA Gente Soy nuevo en el foro y con arduino.. Tengo ya un post abierto pero no lo puedo ver para cerrarlo. Este es un pequeño problema. El problema mas interasante u inconveniente que tengo es el siguiente:

Estoy haciendo un termostato con arduino, un termostato es dentro de todo facil viendo y aprendiendo cosas basicas lo logre hacer. Pero hacer algo mas complicado es hagregarle lo siguiente.

Si alguno tiene una sugerenciay tengo que cambiar toda la extructura para usar otra funcion etc. No tengo problema. Me gustaria poder llegar a realizar este proyecto. No quiciera que me lo den resuelto pero una idea u ayuda basica seria muy buena y estaria muy agradecido.

El tema es asi: Quiero hacer un termostato que cuando lea una temperatura ademas de controlar una salida rele(para el compresor) tambien este termostato sea capas de hacer lo siguiente: Como lo hacen las heladeras modernas.
Al cabo de un tiempo desabilite la funcion control de temperatura y comience una funcion que seria descongelar, activando otro rele(resistencia),este descongelamiento terminaria o estaria restringiado por una temperatura X, Es decir, comienzo a descongelar en un momento programado y cuando llegue este proceso a una temperatura ejemplo +2 ºC culmine el descongelamiento. Pero se agrega otra cosa o tercera etapa que es fija e tiempo y se llama goteo, no esta habilitado el control de temperatura ni la resistencia.Mas concreto seria asi, una ves que culmine el decongelamiento entraria en goteo unos 20 minutos. Luego de este proceso volveria la funcion desde el principio para controlar la temperatura.

Yo tengo el codigo resuelto para operar el sensor ntc. Con if controlo el arranque y pare del compresor. Pero no quiero hacer las interruociones con delay. Quiero hacerlas con millis pero me cuesta ya que soy aprendiz todavia.
Anexo ahora un codigo que estuve usando muy basicamente para ver que hacer con millis, pero el codigo el mas completo con la parte de codigo de la sonda,, que ya lo probe y funciona de diez.
int EstadoLedRojo = LOW;

unsigned long Enfriar = 6000;
unsigned long Descongelar = 3000;
unsigned long Goteo = 3000;

unsigned long Ahora = 0;
unsigned long Antes = 0;

void setup() {
pinMode(11,OUTPUT);
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
}

void loop() {
unsigned long Ahora = millis(); /// lo que quisiera hacer para aprender con millis es encender primero led amarillo
if (Ahora>=Enfriar)/// luego apagarlo y prender el rojo y luego prender el verde.luego repetir la rutina
{ digitalWrite(11,HIGH);
digitalWrite(10,LOW);
digitalWrite(9,LOW);}
else digitalWrite(10,HIGH);

if (Ahora-Antes>Descongelar)
{ Antes=Ahora-Enfriar;
digitalWrite( EstadoLedRojo,LOW);
digitalWrite(9,HIGH);}
if (Ahora-Antes>Goteo)
{Antes=Ahora-Enfriar-Descongelar;
digitalWrite(9,LOW);
}

}

Este codigo lo probe y no funciona.. obvio porque esta re mal hecho, algo basico saque del blink sin delay pero no va esto. No es ciclico ni siquiera hace un ciclo de lo que quisiera.
Desde ya muchas gracias...

A ver como se comporta este código?

#define pinAMARILLO         11
#define pinROJO             10
#define pinVERDE            9

 int EstadoLedRojo          = LOW;

 unsigned long Enfriar      = 6000;
 unsigned long Descongelar  = 3000;
 unsigned long Goteo        = 3000;

 unsigned long Ahora        = 0;
 unsigned long Antes        = 0;
 
void setup() {
 pinMode(pinAMARILLO,OUTPUT);
 pinMode(pinROJO,OUTPUT);
 pinMode(pinVERDE,OUTPUT);
 Ahora = millis();
}

void loop() {
  // lo que quisiera hacer para aprender con millis es encender primero led amarillo 

  switch(estado) {
    case 0: if (millis()-Ahora >= Enfriar) {
                digitalWrite(pinAMARILLO,HIGH);
                digitalWrite(pinROJO,LOW);
                digitalWrite(pinVERDE,LOW);
                Ahora = millis();
                estado = 1; // paso a led ROJO
            }
            break;
    case 1: if (millis()-Ahora >= Descongelar) {
                digitalWrite(pinAMARILLO,LOW);
                digitalWrite(pinROJO, HIGH);
                digitalWrite(pinVERDE,LOW);
                Ahora  = millis();
                estado = 2; // paso a led VERDE
            }
            break;
    case 2: if (millis()-Ahora >= Goteo) {
                digitalWrite(pinAMARILLO,LOW);
                digitalWrite(pinROJO, LOW);
                digitalWrite(pinVERDE,HIGH);
                Ahora = millis();
                estado = 3; // paso a led ROJO
            }
            break;
    case 3: 
    default: estado = 0;
             break;
  }
}

Mira como he posteado el código,por favor lee las normas y edita tu post.