Cambio pantalla cada 5 segundos sin funcion delay()

Hola buenas,
Estoy intentando hacer una estacion meteorologica, que lea los datos de los sensores cada 5 minutos y subirlos a un servidor con una base de datos.
De momento esto haciendo la parte de la lectura de los sensores cada 5 minutos. Mi idea, es que en una pantalla lcd se vayan mostrando los datos actuales de los sensores y el dia y la hora. La idea es mostrar los datos de un sensor en la pantalla durante 5 segundos. Al cabo de 5 segundos mostrar los datos de otro sensor y asi con todos los sensores, de manera que los datos de cada sensor estaran en pantalla solo 5 segundos. Esta parte del cambio de pantalla cada 5 segundos no consigo que me salga sin utilizar la funcion delay(). Cualquier ayuda será buena.
Gracias de antemano.

//ESTACIO METEOROLOGICA
//LLIBRERIES
#include <TimeLib.h>
#include <TimeAlarms.h>
#include <BH1750.h>
#include <Adafruit_BME280.h>
#include <RTClib.h>
#include <Wire.h>
#include <HTU21D.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <DHT_U.h>

unsigned long tActual = 0;
unsigned long tUCambio = 0;
unsigned long interval = 5000;


//HTU21D  --- a 3V connectat per I2C
HTU21D htu;
float T;
float H;
float CH;

//DHT22  ---  a 5V i connectat al pin 7
#define DHTTYPE DHT22
#define DHTPIN 8
DHT dht (DHTPIN, DHTTYPE);
float t;
float h;
float sensTerm;

//SENSOR BMP280  --- a 3v i connectat per I2C
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;
unsigned long delayTime;
float temp;
float pressio;
float alt;
float hum;

//RELLOTGE RTC  --- a 5V i conectat per I2C
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

//PANTALLA LCD 20X04  ---- 5V i conectat per I2C
LiquidCrystal_I2C lcd(0x3f, 20, 4);

void setup() {
  Serial.begin(9600);
  rtc.begin();
  lcd.init();
  lcd.clear();
  lcd.backlight();
  htu.begin();
  dht.begin();
  bme.begin();

  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  DateTime now = rtc.now();

  Alarm.alarmRepeat(18, 45, 0, lecturaSensors);
  Alarm.timerRepeat(300000, lecturaSensors);
}



void loop() {
  tActual = millis();
  if (tActual - tUCambio >= interval) {
    pantPrinc;
    tUCambio = tActual;
  }
  if (tActual - tUCambio >= interval) {
    tUCambio = tActual;
    pant1;
  }
  if (tActual - tUCambio >= interval) {
    tUCambio = tActual;
    pant2;
  }
  if (tActual - tUCambio >= interval) {
    tUCambio = tActual;
    pant3;
  }
  if (tActual - tUCambio >= interval) {
    tUCambio = tActual;
    pant4;
  }
}

void pantPrinc ()
{
  DateTime now = rtc.now();
  //Pantalla principal
  lcd.clear();
  lcd.setCursor(5, 0);
  lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.println(daysOfTheWeek[now.dayOfTheWeek()]);
  lcd.setCursor(0, 1);
  lcd.print(now.day(), DEC);
  Serial.print(now.day(), DEC);
  lcd.print('/');
  Serial.print('/');
  lcd.print(now.month(), DEC);
  Serial.print(now.month(), DEC);
  lcd.print('/');
  Serial.print('/');
  lcd.print(now.year(), DEC);
  Serial.println(now.year(), DEC);
  lcd.setCursor(0, 2);
  lcd.print(now.hour(), DEC);
  Serial.print(now.hour(), DEC);
  lcd.print(':');
  Serial.print(':');
  lcd.print(now.minute(), DEC);
  Serial.print(now.minute(), DEC);
  lcd.print(':');
  Serial.print(':');
  lcd.print(now.second(), DEC);
  Serial.println(now.second(), DEC);
  Serial.println("----------------------");
}

void pant1() {
  //Pantalla 1
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Pantalla principal");
  Serial.println("Pantalla principal");
  lcd.setCursor(0, 1);
  lcd.print("Temperatura:");
  Serial.print("Temperatura:");
  lcd.print(T);
  Serial.print(T);
  lcd.print("*C");
  Serial.println("ºC");
  lcd.setCursor(0, 2);
  lcd.print("Humitat:");
  Serial.print("Humitat");
  lcd.print(CH);
  Serial.print(CH);
  Serial.println("%");
  lcd.setCursor(0, 3);
  lcd.print("SensacioTermica:");
  Serial.print("Sensació Tèrmica:");
  lcd.print(sensTerm);
  Serial.print(sensTerm);
  lcd.print("ºC");
  Serial.println("ºC");
  Serial.println("----------------------");
}

void pant2() {
  //Pantalla 2
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("HTU21D");
  Serial.println("HTU21D");
  lcd.setCursor(0, 1);
  lcd.print("Temperatura:");
  Serial.print("Temperatura:");
  lcd.print(T);
  Serial.print(T);
  lcd.println("*C");
  Serial.println("ºC");
  lcd.setCursor(0, 2);
  lcd.print("Humitat:");
  Serial.print("Humitat:");
  lcd.print(H);
  Serial.print(H);
  Serial.println("%");
  lcd.setCursor(0, 3);
  lcd.print("Humitat compensada:");
  Serial.print("Humitat Compensada:");
  lcd.print(CH);
  Serial.print(CH);
  Serial.println("%");
  Serial.println("----------------------");

}
void pant3() {
  //Pantalla 3
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("dht22");
  Serial.println("DHT");
  lcd.setCursor(0, 1);
  lcd.print("Temperatura:");
  Serial.print("Temperatura:");
  lcd.print(t);
  Serial.print(t);
  lcd.print("*C");
  Serial.println("ºC");
  lcd.setCursor(0, 2);
  lcd.print("Humitat:");
  Serial.print("Humitat:");
  lcd.print(h);
  Serial.print(h);
  Serial.println("%");
  lcd.setCursor(0, 3);
  lcd.print("SensacioTermica:");
  Serial.print("Sensació Tèrmica:");
  lcd.print(sensTerm);
  Serial.print(sensTerm);
  lcd.print("ºC");
  Serial.println("ºC");
  Serial.println("----------------------");
}

void pant4() {
  //Pantalla 4
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print ("Barometre");
  Serial.println("Barometre");
  lcd.setCursor(0, 1);
  lcd.print("La pressió es:");
  Serial.print("a pressió es:");
  lcd.print(pressio);
  Serial.print(pressio);
  lcd.print("hPa");
  Serial.println("hPa");
  lcd.setCursor(0, 2);
  lcd.print("Altura:");
  Serial.print("Altura:");
  lcd.print(alt);
  Serial.print(alt);
  lcd.print("m");
  Serial.println("m");
  Serial.print("Temperatura:");
  Serial.print(temp);
  Serial.print("Humitat:");
  Serial.println("ºC");
  Serial.print(hum);
  Serial.println("%");
  Serial.println("----------------------");
}

float lecturaSensors() {
  float T = htu.readTemperature();
  float H = htu.readHumidity();
  float CH = htu.readCompensatedHumidity();
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  float sensTerm = dht.computeHeatIndex(t, h, false);
  float temp = bme.readTemperature();
  float pressio = bme.readPressure() / 100.0F;
  float alt = bme.readAltitude(SEALEVELPRESSURE_HPA);
  float hum = bme.readHumidity();
}

-Estudia el ejemplo del IDE Archivo->Ejemplos->Digital->BlynkWithoutDelay
-Busca en apartado Documentacion ,hay tutoriales del uso de millis()
Para ir variando que sensor mostrar usa solo un evento de paso de tiempo y una variable que vaya incrementando el valor y segun el valor muestras una cosa u otra.Tienes que controlar que esta variable se mueva en los limites que necesites,por ejemplo si muestras 5 pantallas,que vaya de 0 a 4 o de 1 a 5

byte opcion = 1;
void setup(){}
void loop(){
  tActual = millis();
  if (tActual - tUCambio >= interval) {
    tUCambio = tActual;
    switch(opcion){
      case 1:
        //Muestro pantalla 1
      break;
      case 2:
        //Muestro pantalla 2
      break; 
      // etc etc
    }
    opcion ++;
    if(opcion == 6){ // Suponemos 5 pantallas del 1 al 5
      opcion = 1;
    }
  }
}