Control de temperatura display y timer

Buenas tardes, les comento que estoy tratando de aprender desde esta página y lo que hay publicado en la web, pero hasta ahora no puedo comprender del todo las funciones, por lo que acudo a uds por ayuda, estoy tratando de modificar un programa que encontrè en la web para que mida temperatura y accione 2 salidas eso ya logrè que funcione cómo esperaba, es decir dispara la salida 1 y desactiva la salida 2 pero no logro darme cuenta cómo implementar un timer que, en este caso cuando llegue a la temperatura seteada , y la salida 1 esta activa ,comience una cuenta regresiva de 30 segundos, al finalizar esta cuenta desactiva 1 y comienza otra de 180 segundos , y así en loop.
Desde ya agradezco su tiempo en leer mi post.
el código:

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

const int LED_RED=10; //Red LED
const int LED_GREEN=11; //Green LED
const int RELAY=12; //Relay 


int SetPoint=40;

void setup(){
  pinMode(LED_RED,OUTPUT);
  pinMode(LED_GREEN,OUTPUT);  
  pinMode(RELAY,OUTPUT);  

   // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  
  lcd.setCursor(0,1); /
  lcd.print("Temp. Controller");
  digitalWrite(LED_GREEN,HIGH);  //Green LED Off
  digitalWrite(LED_RED,LOW);     //Red LED On
  digitalWrite(RELAY,LOW);       //Turn off Relay
  delay(2000);
 
}

void loop(){
  
int sensorValue = analogRead(A0);
  lcd.setCursor(0,0);
  lcd.print("Temperatura:");    
  lcd.print(sensorValue);
  
//Get user input for setpoints  
  if(digitalRead(down_key)==LOW)
  {
    if(SetPoint>0)
    {
      SetPoint--;    
    }
  }
  if(digitalRead(up_key)==LOW)
  {
    if(SetPoint<150)
    {
      SetPoint++;
    }
  }

//Display Set point on LCD
  lcd.setCursor(0,1);
  lcd.print("Set Point:");
  lcd.print(SetPoint);
  lcd.print("C   ");

//Check Temperature is in limit
if(sensorValue > SetPoint)
{
   
   digitalWrite(RELAY,LOW);    //Turn off heater
   digitalWrite(LED_RED,LOW);
   digitalWrite(LED_GREEN,HIGH);  //Turn on Green LED
   
}

else
{
  digitalWrite(RELAY,HIGH);    //Turn on heater
  digitalWrite(LED_GREEN,LOW);
  digitalWrite(LED_RED,HIGH);  //Turn on RED LED  
}

  delay(500); //Update at every 100mSeconds
}

Por favor edita tu post y presenta bien el código.
Selecciona todo el código y pulsa </> en la barra del editor.

Mientras tu haces eso, voy pensando una solución.

Saludos

Así está bien pero deberías haber editado tu post original.

Yendo a tu consulta, primero hay que "volar" los delay(), advertido, porque delays y temporizadoes no se llevan bien.

No me queda claro lo de los retardos, activa salida 1, cuenta 30 seg, apaga salida 1 y...
¿Debería activar la salida 2 o esperar 180 seg para activar la salida 2? ¿O para qué sería la espera de 180 seg?
Tené presente que 180 seg son 3 minutos

Moderador:
Perdón pero yo borré el post#3 y edité el original.
Escribo esto para que no quede descolgado el comentario de @gatul

Gracias por la edición surbyte y por tu tiempo gatul, la salida 1 se apaga cuando alcanza el setpoint, ahi enciende salida 2 por 30 segundos, se apaga salida salida 2 por 180 segundos, y si la temperatura está en los límites del setpoint enciende otra vez salida 2, sino enciende salida 1 hasta el setpoint y luego salida 2, así en loop.
Lo edite porque creo no se entendió.