¿Como temporizar una hora?

Gracias Noter y Surbyte por vuestra respuesta, la velocidad del incremento de temperatura viene marcado por la potencia del calentador.
Eso para el proyecto debe ser transparente, si tarda 5min o una hora, no es significativo para el proyecto.
La intención es que una vez alcanzado el grado de temperatura que debe subir, tarde lo que tarde, se mantenga una hora a esa temperatura, y luego suba otro grado.
Os pongo el código para que veáis lo que tengo hecho hasta ahora, que es solo, control de temperatura.
Seguro que el código es mejorable, pero es lo que he podido hacer con mis conocimientos.

//TERMOSTATO ACUARIO CON LM35
//CONTROLA LA TEMPERATURA DEL AGUA Y ACTIVA O DESACTIVA UN RELE PARA SALIDA DE CALENTADOR
//MEMORIZA EN EEPROM LA TEMPERATURA OBJETIVO A MANTENER
// 30/3/2018 SI LA TEMPERATURA BAJA DE 24 O SUBE DE 31 SALTA UN BUZZER. SE PUEDE SILENCIAR EL BUZZER Y APARECE UN * INDICANDO QUE LA ALARMA ESTA DESABILITADA  

// Incluir el código de la biblioteca:
#include <LiquidCrystal.h>

// Inicializa la biblioteca con las conexiones a los pins del interface Arduino:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#include<EEPROM.h>

// Patillas y variables globales

  int sensor=A0; // Sensor en entrada analógica pin A0
  int modo=6; // Pulsador Memo pin 6
  int adj=7; //Pulsador de ajuste pin 7
  int led=1; // LED de salida pin 1
  int buzzer=8; //Buzzer alarma
  float valorSensor=0; // Variable con el contenido de la entrada analógica A0
  float termo=0; // Variable con el valor real de temperatura
  int pulsa1=0;  // Variable con estado de pin 6
  int pulsa2=0;  // Variable con estado de pin 7
  int temp_memo; // Variable para guardar el valor de temperatura objetivo 
  float temp; // Variable de conmutación del relé (LED Rojo)
  int flag=0; //Bandera para desactivar buzzer  buzzer=LOW


// Subprograma de alarma
void alarma()// Suena alarma
  { 
    digitalWrite(buzzer,HIGH);
    delay(50);
    digitalWrite(buzzer,LOW);
    delay(50);
    digitalWrite(buzzer,HIGH);
    delay(50);
    digitalWrite(buzzer,LOW);
  }// Fin Subprograma de alarma

// Subprograma de temperatura
void temperatura()// Control de temperatura. Ajuste de umbral 
  { 
     
  pulsa1=0;
  digitalWrite(buzzer,HIGH);
  delay(100);
  digitalWrite(buzzer,LOW);       
  while(pulsa1 == LOW) // Umbral de conmutación del relé (LED Rojo)
  
  { 
    delay(1000);
    pulsa1 = digitalRead(modo);
    pulsa2 = digitalRead(adj);
    if (pulsa2 == HIGH)
        
      {         
        temp = temp + 1; // Incrementos de  grados
      }
       
    if ((temp < 24) or (temp > 31))
      {
        temp = 24;
      }
        
    lcd.setCursor(5,0);            
    lcd.print("AJUSTE");
    lcd.setCursor(3,1);            
    lcd.print("TEMP:");
    lcd.print(temp);
    lcd.blink();
  }
  lcd.clear();
  lcd.setCursor(2,1);
  lcd.noBlink();
  lcd.print(temp);
  lcd.print(" Grados");
  delay(1000);
  lcd.setCursor(1,1);
  lcd.print("TEMP MEMORIZADA");
  temp_memo=temp*100;
  EEPROM.put(0,temp_memo);
  delay(1000); 
  
} // Fin Subprograma de temperatura

// Inicialización del programa
void setup() 
{ 
  lcd.begin(16, 2);
  lcd.setCursor(2, 0); 
  lcd.print("TERMOSTATO");
  lcd.setCursor(2, 1);
  lcd.print("ACUARIO Ver1");
  delay(1000);

  EEPROM.get(0,temp_memo);//Leo el valor de la temperatura objetivo ajustada
  temp=temp_memo/100;

  pinMode(modo,INPUT);
  pinMode(adj,INPUT);
  pinMode(led,OUTPUT);
  pinMode(buzzer,OUTPUT); 
  digitalWrite(buzzer,LOW);
}

void loop() {
  pulsa1 = digitalRead(modo);
  if (pulsa1 == HIGH)//Pulsador memo
    
    {
      temperatura(); //VOY A SUBRUTINA DE TEMPERATURA
    }
     
  lcd.setCursor(3,0);
  lcd.print("TEMP:");
  valorSensor=analogRead(sensor);
  termo=(valorSensor / 2);
  lcd.print(termo);
   if (flag==1)
   
   {
    lcd.setCursor(0,0); 
    lcd.print("*");
   }
  
  delay(500);

  if (termo < temp)
  
   {
    digitalWrite(led,HIGH);
    lcd.setCursor(2, 1);
    lcd.print("CALENTADOR ON");
    delay(500);
   }
   
 if (termo >= temp)
 
   {
     digitalWrite(led,LOW);
      lcd.clear();
   }

if (termo < 24)

  {
  lcd.clear();  
  lcd.setCursor(3,0); 
  lcd.print("TEMP:");
  lcd.print(termo);
  lcd.setCursor(2, 1);
  lcd.print("**TEMP LOW**");
  
   if (flag==1)
    {
     lcd.setCursor(0,0); 
     lcd.print("*");
    }
   delay(500);
   lcd.clear();
  }
  
pulsa2 = digitalRead(adj);
if (pulsa2 == HIGH)

 {  
  flag=flag+1;
  delay(10);
  if (flag > 1) 
   {
    flag=0;
   }
 }
  
 if ((termo <24) && (flag==0)) {alarma();}
 if ((termo <24) && (flag==1)) {digitalWrite(buzzer,LOW);}
 if ((termo >31) && (flag==0)) {alarma();}
 if ((termo >31) && (flag==1)) {digitalWrite(buzzer,LOW);}
 if ((termo >=24) && (termo<=31)) {digitalWrite(buzzer,LOW);}

 if (termo > 31)
 
  {
   lcd.clear();  
   lcd.setCursor(3,0);  
   lcd.print("TEMP:");
   lcd.print(termo);
   lcd.setCursor(2, 1);
   lcd.print("*TEMP. HIGH*");
    if (flag==1)
     {
      lcd.setCursor(0,0); 
      lcd.print("*");
     }
   delay(500);
   lcd.clear();
  }
    
} //Fin