Código. no me sale nada en monitor serial

Hola buenas,

Es la primera vez que escribo en este foro.
Estoy intentando hacer una estación meteorológica. Mi idea es leer los datos de unos sensores cada 10 minutos y mostrar estos datos en una pantalla lcd y en el monitor serial.
Con el codigo que tengo no me sale nada en el monitor serial ni en la pantalla lcd y no se porque. Pongo el código a continuación, agradeceria cualquier ayuda.
Pongo el codigo en dos mensajes que no me cabe en uno

//ESTACIO METEOROLOGICA
//LLIBRERIES

#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>

//HTU21D 
HTU21D sensorHTU;
float T = sensorHTU.readTemperature();
float H = sensorHTU.readHumidity();
float CH = sensorHTU.readCompensatedHumidity();

//DHT22  
#define DHTTYPE DHT22
#define DHTPIN 8
DHT sensordht (DHTPIN, DHTTYPE);
float t = sensordht.readTemperature();
float h = sensordht.readHumidity();
float sensTerm = sensordht.computeHeatIndex(t, h, false);

//SENSOR BMP280  
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;
unsigned long delayTime;
float temp = bme.readTemperature();
float pressio = bme.readPressure();
float alt = bme.readAltitude(1023.25);
float hum = bme.readHumidity();

//SENSOR DE LLUM  
BH1750 luxometre;
float lux = luxometre.readLightLevel();

//RELLOTGE RTC  
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

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



void setup() {
  Serial.begin(9600);
  sensorHTU.begin();//0x40
  sensordht.begin();
  bme.begin();//0x76
  luxometre.begin();
  rtc.begin();
  pantallalcd.init();
  pantallalcd.clear();
  pantallalcd.backlight();


}



void loop() {


  //OBTENIM HORA
  DateTime now = rtc.now();

  //LECTURA DE TOTS ELS SENSORS
    if (now.minute() == 00) {
      float T = sensorHTU.readTemperature();
      float H = sensorHTU.readHumidity();
      float CH = sensorHTU.readCompensatedHumidity();
      float t = sensordht.readTemperature();
      float h = sensordht.readHumidity();
      float sensTerm = sensordht.computeHeatIndex(t, h, false);
      float temp = bme.readTemperature();
      float pressio = bme.readPressure();
      float alt = bme.readAltitude(SEALEVELPRESSURE_HPA);
      float hum = bme.readHumidity();
      float lux = luxometre.readLightLevel();
    }
    delay(100);

    if (now.minute() == 10) {
      float T = sensorHTU.readTemperature();
      float H = sensorHTU.readHumidity();
      float CH = sensorHTU.readCompensatedHumidity();
      float t = sensordht.readTemperature();
      float h = sensordht.readHumidity();
      float sensTerm = sensordht.computeHeatIndex(t, h, false);
      float temp = bme.readTemperature();
      float pressio = bme.readPressure();
      float alt = bme.readAltitude(SEALEVELPRESSURE_HPA);
      float hum = bme.readHumidity();
      float lux = luxometre.readLightLevel();
    }
    delay(100);
    if (now.minute() == 20) {
      float T = sensorHTU.readTemperature();
      float H = sensorHTU.readHumidity();
      float CH = sensorHTU.readCompensatedHumidity();
      float t = sensordht.readTemperature();
      float h = sensordht.readHumidity();
      float sensTerm = sensordht.computeHeatIndex(t, h, false);
      float temp = bme.readTemperature();
      float pressio = bme.readPressure();
      float alt = bme.readAltitude(SEALEVELPRESSURE_HPA);
      float hum = bme.readHumidity();
      float lux = luxometre.readLightLevel();
    }
    delay(100);
    if (now.minute() == 30) {
      float T = sensorHTU.readTemperature();
      float H = sensorHTU.readHumidity();
      float CH = sensorHTU.readCompensatedHumidity();
      float t = sensordht.readTemperature();
      float h = sensordht.readHumidity();
      float sensTerm = sensordht.computeHeatIndex(t, h, false);
      float temp = bme.readTemperature();
      float pressio = bme.readPressure();
      float alt = bme.readAltitude(SEALEVELPRESSURE_HPA);
      float hum = bme.readHumidity();
      float lux = luxometre.readLightLevel();
    }
    delay(100);
    if (now.minute() == 40) {
      float T = sensorHTU.readTemperature();
      float H = sensorHTU.readHumidity();
      float CH = sensorHTU.readCompensatedHumidity();
      float t = sensordht.readTemperature();
      float h = sensordht.readHumidity();
      float sensTerm = sensordht.computeHeatIndex(t, h, false);
      float temp = bme.readTemperature();
      float pressio = bme.readPressure();
      float alt = bme.readAltitude(SEALEVELPRESSURE_HPA);
      float hum = bme.readHumidity();
      float lux = luxometre.readLightLevel();
    }
    delay(100);
    if (now.minute() == 50) {
      float T = sensorHTU.readTemperature();
      float H = sensorHTU.readHumidity();
      float CH = sensorHTU.readCompensatedHumidity();
      float t = sensordht.readTemperature();
      float h = sensordht.readHumidity();
      float sensTerm = sensordht.computeHeatIndex(t, h, false);
      float temp = bme.readTemperature();
      float pressio = bme.readPressure();
      float alt = bme.readAltitude(SEALEVELPRESSURE_HPA);
      float hum = bme.readHumidity();
      float lux = luxometre.readLightLevel();
    }
    delay(100);
  //MOSTRA EN PANTALLA LCD I SERIAL A LA VEGADA

  //Pantalla 1

  pantallalcd.clear();
  pantallalcd.setCursor(5, 0);
  pantallalcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.println(daysOfTheWeek[now.dayOfTheWeek()]);
  pantallalcd.setCursor(0, 1);
  pantallalcd.print(now.day(), DEC);
  Serial.println(now.day(), DEC);
  pantallalcd.print('/');
  Serial.println('/');
  pantallalcd.print(now.month(), DEC);
  Serial.println(now.month(), DEC);
  pantallalcd.print('/');
  Serial.println('/');
  pantallalcd.print(now.year(), DEC);
  Serial.println(now.year(), DEC);
  pantallalcd.setCursor(0, 2);
  pantallalcd.print(now.hour(), DEC);
  Serial.println(now.hour(), DEC);
  pantallalcd.print(':');
  Serial.println(':');
  pantallalcd.print(now.minute(), DEC);
  Serial.println(now.minute(), DEC);
  pantallalcd.print(':');
  Serial.println(':');
  pantallalcd.print(now.second(), DEC);
  Serial.println(now.second(), DEC);
  Serial.println("----------------------");
  delay(1000);



  //Pantalla 2

  pantallalcd.clear();
  pantallalcd.setCursor(0, 0);
  pantallalcd.print("Pantalla principal");
  Serial.println("Pantalla principal");
  pantallalcd.setCursor(0, 1);
  pantallalcd.print("Temperatura:");
  Serial.println("Temperatura:");
  pantallalcd.print(T);
  Serial.println(T);
  pantallalcd.print("*C");
  Serial.println("ºC");
  pantallalcd.setCursor(0, 2);
  pantallalcd.print("Humitat:");
  Serial.println("Humitat");
  pantallalcd.print(CH);
  Serial.println(CH);
  pantallalcd.setCursor(0, 3);
  pantallalcd.print("SensacioTermica:");
  Serial.println("Sensació Tèrmica:");
  pantallalcd.print(sensTerm);
  Serial.println(sensTerm);
  pantallalcd.print("ºC");
  Serial.println("ºC");
  Serial.println("----------------------");
  delay(1000);



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




  //Pantalla 4
  pantallalcd.clear();
  pantallalcd.setCursor(0, 0);
  pantallalcd.print("DHT22");
  Serial.println("DHT22");
  pantallalcd.setCursor(0, 1);
  pantallalcd.print("Temperatura:");
  Serial.println("Temperatura:");
  pantallalcd.print(t);
  Serial.println(t);
  pantallalcd.print("*C");
  Serial.println("ºC");
  pantallalcd.setCursor(0, 2);
  pantallalcd.print("Humitat:");
  Serial.println("Humitat:");
  pantallalcd.print(h);
  Serial.println(h);
  pantallalcd.setCursor(0, 3);
  pantallalcd.print("SensacioTermica:");
  Serial.println("Sensació Tèrmica:");
  pantallalcd.print(sensTerm);
  Serial.println(sensTerm);
  pantallalcd.print("ºC");
  Serial.println("ºC");
  Serial.println("----------------------");
  delay(1000);



  //Pantalla 5
  pantallalcd.clear();
  pantallalcd.setCursor(0, 0);
  pantallalcd.print ("Lluminositat");
  Serial.println("Lluminositat:");
  pantallalcd.setCursor(0, 1);
  pantallalcd.print("La lluminositat és de:");
  Serial.println("la lluminositat és de:");
  pantallalcd.print(lux);
  Serial.println(lux);
  pantallalcd.print("Lux");
  Serial.println("Lux.");
  Serial.println("----------------------");
  delay(1000);


  //Pantalla 6
  pantallalcd.clear();
  pantallalcd.setCursor(0, 0);
  pantallalcd.print ("Barometre");
  Serial.println("Barometre");
  pantallalcd.setCursor(0, 1);
  pantallalcd.print("La pressió es:");
  Serial.println("a pressió es:");
  pantallalcd.print(pressio);
  Serial.println(pressio);
  pantallalcd.print("hPa");
  Serial.println("hPa");
  pantallalcd.setCursor(0, 2);
  pantallalcd.print("Altura:");
  Serial.println("Altura:");
  pantallalcd.print(alt);
  Serial.println(alt);
  pantallalcd.print("m");
  Serial.println("m");
  Serial.println("----------------------");
  delay(1000);





}

Se supone que el segundo codigo que posteas va dentro del loop,a continuacion del codigo del primer post?

si, así es

Ok ,de momento empieza por quitar todas las definiciones de variables que ya has hecho antes del setup,si haces esto:

//HTU21D
HTU21D sensorHTU;
float T = sensorHTU.readTemperature();
float H = sensorHTU.readHumidity();
float CH = sensorHTU.readCompensatedHumidity();

no hace falta que en el loop las vuelvas a definir:

if (now.minute() == 00) {
      float T = sensorHTU.readTemperature();
      float H = sensorHTU.readHumidity();
      float CH = sensorHTU.readCompensatedHumidity();

las variables ya son globales al definirlas fuera del loop :

if (now.minute() == 00) {
      T = sensorHTU.readTemperature();
      H = sensorHTU.readHumidity();
      CH = sensorHTU.readCompensatedHumidity();

y asi con todas las que uses y que ya hayas definido.
Tambien veo que lees los sensores al definir las variables,esto ocurre antes del setup() ,por lo que los sensores aun no estan inicializados y puede ser que no te den lecturas.

No esta probado pero debería funcionar mas o menos adecuadamente.

//ESTACIO METEOROLOGICA
//LLIBRERIES

#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>

#define INTERVALO   10*60*1000 // expresado en milisegundos

//HTU21D
HTU21D sensorHTU;
float T = sensorHTU.readTemperature();
float H = sensorHTU.readHumidity();
float CH = sensorHTU.readCompensatedHumidity();

//DHT22  
#define DHTTYPE DHT22
#define DHTPIN 8
DHT sensordht (DHTPIN, DHTTYPE);
float t = sensordht.readTemperature();
float h = sensordht.readHumidity();
float sensTerm = sensordht.computeHeatIndex(t, h, false);

//SENSOR BMP280  
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;
unsigned long delayTime;
float temp = bme.readTemperature();
float pressio = bme.readPressure();
float alt = bme.readAltitude(1023.25);
float hum = bme.readHumidity();

//SENSOR DE LLUM  
BH1750 luxometre;
float lux = luxometre.readLightLevel();

//RELLOTGE RTC  
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

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

unsigned long muestroDatos;
byte contador = 0;

void setup() {
  Serial.begin(9600);
  sensorHTU.begin();//0x40
  sensordht.begin();
  bme.begin();//0x76
  luxometre.begin();
  rtc.begin();
  pantallalcd.init();
  pantallalcd.clear();
  pantallalcd.backlight();
}



void loop() {

  //OBTENIM HORA
  DateTime now = rtc.now();

  //LECTURA DE TOTS ELS SENSORS
  if (millis() - muestroDatos > INTERVALO) {
      T = sensorHTU.readTemperature();
      H = sensorHTU.readHumidity();
      CH = sensorHTU.readCompensatedHumidity();
      t = sensordht.readTemperature();
      h = sensordht.readHumidity();
      sensTerm = sensordht.computeHeatIndex(t, h, false);
      temp = bme.readTemperature();
      pressio = bme.readPressure();
      alt = bme.readAltitude(SEALEVELPRESSURE_HPA);
      hum = bme.readHumidity();
      lux = luxometre.readLightLevel();
      muestroDatos = millis();
  }

  if (millis() - presentoDatos > 1000UL) {
      switch(contador++) {
        case 0: pantalla1();
                break;
        case 1: pantalla2();
                break;
        case 2: pantalla3();
                break;
        case 3: pantalla4();
                break;
        case 4: pantalla5();
                break;
        case 5: pantalla6();
                break;
        case 6: 
        default:contador = 1;
                break;

      }
      presentoDatos = millis();
  }
}

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

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

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

void pantalla4() {
  //Pantalla 4
  pantallalcd.clear();
  pantallalcd.setCursor(0, 0);
  pantallalcd.print("DHT22");
  Serial.println("DHT22");
  pantallalcd.setCursor(0, 1);
  pantallalcd.print("Temperatura:");
  Serial.println("Temperatura:");
  pantallalcd.print(t);
  Serial.println(t);
  pantallalcd.print("*C");
  Serial.println("ºC");
  pantallalcd.setCursor(0, 2);
  pantallalcd.print("Humitat:");
  Serial.println("Humitat:");
  pantallalcd.print(h);
  Serial.println(h);
  pantallalcd.setCursor(0, 3);
  pantallalcd.print("SensacioTermica:");
  Serial.println("Sensació Tèrmica:");
  pantallalcd.print(sensTerm);
  Serial.println(sensTerm);
  pantallalcd.print("ºC");
  Serial.println("ºC");
  Serial.println("----------------------");
}
  
void pantalla5() {
  //Pantalla 5
  pantallalcd.clear();
  pantallalcd.setCursor(0, 0);
  pantallalcd.print ("Lluminositat");
  Serial.println("Lluminositat:");
  pantallalcd.setCursor(0, 1);
  pantallalcd.print("La lluminositat és de:");
  Serial.println("la lluminositat és de:");
  pantallalcd.print(lux);
  Serial.println(lux);
  pantallalcd.print("Lux");
  Serial.println("Lux.");
  Serial.println("----------------------");
}

void pantalla6() { 
  pantallalcd.clear();
  pantallalcd.setCursor(0, 0);
  pantallalcd.print ("Barometre");
  Serial.println("Barometre");
  pantallalcd.setCursor(0, 1);
  pantallalcd.print("La pressió es:");
  Serial.println("a pressió es:");
  pantallalcd.print(pressio);
  Serial.println(pressio);
  pantallalcd.print("hPa");
  Serial.println("hPa");
  pantallalcd.setCursor(0, 2);
  pantallalcd.print("Altura:");
  Serial.println("Altura:");
  pantallalcd.print(alt);
  Serial.println(alt);
  pantallalcd.print("m");
  Serial.println("m");
  Serial.println("----------------------");  
}

Hola, muchas gracias.
Me ha ayudado bastante, pero ya que tengo el rtc, querria que las lecturas de los sensores coincidieran en el minuto 00, 10, 20, 30, 40 y 50 de cada hora.

He ido avanzando con el programa y he visto todo el tema de las alarmas con la libreria TimeAlarms y he añadido la parte del programa del pluviometro. El problema que tengo ahora es que no me saltan las alarmas, y por tanto los sensores no me hacen las lecturas programadas. Tambien he añadido una interrupcion con el codigo para el pluviometro que no se porque no me funciona.

Llevo un par o tres de dias con esos dos problemas y no se como solucionarlos.
Gracias de antemano.

P.s. pongo el codigo en el siguiente comentario ya que no me deja ponerlo en este porque excede el numero maximo de caracteres

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

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

//Variables temperatura i humitat
float tmax;
float tmin;

//Pluviometre
const int pluvi = 3;  //on conectem el pluviometre
int val = 0; //valor actual de l'interruptor del pluviometre
int ant_val = 0;  //valor anterior de l'interruptor del pluviometre
int comptador = 0;

//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);
    Serial.print("Iniciant...");
  Wire.begin();
    Serial.print("Iniciant2...");
  rtc.begin();
    Serial.print("Iniciant3...");
  htu.begin();  
    Serial.print("Iniciant4...");
  dht.begin();
    Serial.print("Iniciant5...");
  bme.begin();
    Serial.print("Iniciant6...");
  lcd.init();
    Serial.print("Iniciant7...");
  lcd.clear();
    Serial.print("Iniciant8...");
  lcd.backlight();
  Serial.print("Iniciant9...");

  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  DateTime now = rtc.now();
  setSyncProvider(RTC.get);
  setSyncInterval(600);
  if (timeStatus() != timeSet)
    Serial.println("No puc sincronitzar-me amb el RTC");
  else
    Serial.println("El RTC ha fixat l'hora del sistema");
  Alarm.alarmRepeat(19, 39, 0, lecturaSensors);
  Alarm.timerRepeat(300000, lecturaSensors);

  attachInterrupt(digitalPinToInterrupt(pluvi), interruptCount, CHANGE);
}

void loop() {
  Alarm.delay(1000);
  DateTime now = rtc.now();
  tActual = millis();
  if (tActual - tUCambio >= interval) {
    tUCambio = tActual;
    switch (opcion++) {
      case 1: pantPrinc();
        break;
      case 2: pant1();
        break;
      case 3: pant2();
        break;
      case 4: pant3();
        break;
      case 5: pant4();
        break;
      case 6: pant5();
        break;
      case 7: pant6 ();
        break;
      case 8:
      default: opcion = 1;
        break;
    }
  }
}

//Funcions a cridar
void interruptCount() {
  val = digitalRead(pluvi);  //llegim l'estat de l'interruptor del pluviometre
  if ((val == LOW) && (ant_val == HIGH)) {   //comprobem que l'estat a canviat
    delay(10);   //per evitar rebots
    comptador = comptador + 1; //li sumem 1 al comptador
    ant_val = val;
  }
  else {
    ant_val = val;
  }
}

//Lectura de tots els senors
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();
}

//Totes les pantalles
void pantPrinc () {     //Pantalla principal
  DateTime now = rtc.now();
  lcd.clear();
  lcd.setCursor(5, 0);
  lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
  lcd.setCursor(0, 1);
  lcd.print(now.day(), DEC);
  lcd.print('/');
  lcd.print(now.month(), DEC);
  lcd.print('/');
  lcd.print(now.year(), DEC);
  lcd.setCursor(0, 2);
  lcd.print(now.hour(), DEC);
  lcd.print(':');
  lcd.print(now.minute(), DEC);
  lcd.print(':');
  lcd.print(now.second(), DEC);
  Serial.println(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(now.day(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.println(now.year(), DEC);
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.println(now.second(), DEC);
  Serial.println("----------------------");
}
void pant1() {    //Pantalla 1
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Pantalla principal");
  lcd.setCursor(0, 1);
  lcd.print("Temperatura:");
  lcd.print(T);
  lcd.print("*C");
  lcd.setCursor(0, 2);
  lcd.print("Humitat:");
  lcd.print(CH);
  lcd.print("%");
  lcd.setCursor(0, 3);
  lcd.print("SensacioTermica:");
  lcd.print(sensTerm);
  lcd.print("ºC");
  Serial.println("Pantalla principal");
  Serial.print("Temperatura:");
  Serial.print(T);
  Serial.println("ºC");
  Serial.print("Humitat");
  Serial.print(CH);
  Serial.println("%");
  Serial.print("Sensació Tèrmica:");
  Serial.print(sensTerm);
  Serial.println("ºC");
  Serial.println("----------------------");
}
void pant2 () {   //Pantalla 2
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("HTU21D");
  lcd.setCursor(0, 1);
  lcd.print("Temperatura:");
  lcd.print(T);
  lcd.println("*C");
  lcd.setCursor(0, 2);
  lcd.print("Humitat:");
  lcd.print(H);
  lcd.print("%");
  lcd.setCursor(0, 3);
  lcd.print("Humitat compensada:");
  lcd.print(CH);
  lcd.print("%");
  Serial.println("HTU21D");
  Serial.print("Temperatura:");
  Serial.print(T);
  Serial.println("ºC");
  Serial.print("Humitat:");
  Serial.print(H);
  Serial.println("%");
  Serial.print("Humitat Compensada:");
  Serial.print(CH);
  Serial.println("%");
  Serial.println("----------------------");
}
void pant3() {    //Pantalla 3
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("dht22");
  lcd.setCursor(0, 1);
  lcd.print("Temperatura:");
  lcd.print(t);
  lcd.print("*C");
  lcd.setCursor(0, 2);
  lcd.print("Humitat:");
  lcd.print(h);
  lcd.print("%");
  lcd.setCursor(0, 3);
  lcd.print("SensacioTermica:");
  lcd.print(sensTerm);
  lcd.print("ºC");
  Serial.println("DHT");
  Serial.print("Temperatura:");
  Serial.print(t);
  Serial.print("ºC");
  Serial.print("Humitat:");
  Serial.print(h);
  Serial.println("%");
  Serial.print("Sensació Tèrmica:");
  Serial.print(sensTerm);
  Serial.println("ºC");
  Serial.println("----------------------");
}

void pant4() {    //Pantall 4
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("T.max:");
  lcd.print(tmax);
  lcd.print("ºC");
  lcd.setCursor(0, 1);
  lcd.print("T.min:");
  lcd.print(tmin);
  lcd.print("ºC");
  Serial.println("Temperatura i Humitat");
  Serial.print("Temperatura:");
  Serial.print(T);
  Serial.println("ºC");
  Serial.print("Temperatura màxima:");
  Serial.print(tmax);
  Serial.println("ºC");
  Serial.print("Temperatura mínima:");
  Serial.print(tmin);
  Serial.println("ºC");
}
void pant5() {      //Pantalla 5
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print ("Barometre");
  lcd.setCursor(0, 1);
  lcd.print("La pressió es:");
  lcd.print(pressio);
  lcd.print("hPa");
  lcd.setCursor(0, 2);
  lcd.print("Altura:");
  lcd.print(alt);
  lcd.print("m");
  Serial.println("Barometre");
  Serial.print("a pressió es:");
  Serial.print(pressio);
  Serial.println("hPa");
  Serial.print("Altura:");
  Serial.print(alt);
  Serial.println("m");
  Serial.print("Temperatura:");
  Serial.print(temp);
  Serial.print("Humitat:");
  Serial.println("ºC");
  Serial.print(hum);
  Serial.println("%");
  Serial.println("----------------------");
}
void pant6() {      //pantalla 6
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Pluja caiguda");
  lcd.setCursor(0, 1);
  lcd.print("Precipitació:");
  lcd.print(comptador);
  lcd.print("cops");
  lcd.setCursor(0, 2);
  lcd.print("Precipitacio:");
  lcd.print(comptador * 0.0138);
  lcd.print("mm");
  Serial.println("Pluja caiguda");
  Serial.print("Precipitació:");
  Serial.print(comptador);
  Serial.println("cops");
  Serial.print("Mesura de la pluja:");
  Serial.print(comptador * 0.0138);
  Serial.println("mm");
  Serial.println("----------------------");
}

Mis comentarios son conforme voy leyendo el código.

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

Este no es un buen método de ajuste de hora salvo cuando estas en prueba y recompilando 1 y otra vez. Recuérda comentarlo o usar otra librería que haga sincronía con el RTC cuando arranca Arduino o cada X minutos.

La librería TimeAlarms te va a dar alguno que otro dolor de cabeza.
El primer evento ocurrirá a la hora indicada 19:39:00 pero el segundo pasará cada 300000 mseg comenzando por el momento en que se fije este evento de TimeAlarms. Asi que no esta sincronizado con las 19:39:00.
Supongo que ya te has dado cuenta de ello.

Esta interrupción esta mal programada

void interruptCount() {
  val = digitalRead(pluvi);  
  if ((val == LOW) && (ant_val == HIGH)) {   
    delay(10);   // <=== NO PUEDES teener delays dentro de una interrupción
    comptador = comptador + 1; 
    ant_val = val;
  }
  else {
    ant_val = val;
  }
}

Finalmente y solo para que mejores tu programación y achiques el tamaño de tus códigos aprende a usar sprintf para formatear lo que envias por Serial o por lcd.

Esta subrutina

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

Se transforma en esto que además tiene una presentación mas elegante

void pantPrinc () {     //Pantalla principal
  char buffer[20];
  DateTime now = rtc.now();
  lcd.clear();
  lcd.setCursor(5, 0);
  sprinf(buffer,"%s", daysOfTheWeek[now.dayOfTheWeek()]);
  lcd.print(buffer);
  Serial.println(buffer);
  Serial.println();
  lcd.setCursor(0, 1);
  sprinf(buffer,"%02d/%02d/%02d", now.day(), now.month(), now.year());
  lcd.print(buffer);
  Serial.println(buffer);

  lcd.setCursor(0, 2);
  sprinf(buffer,"%02d:%02d:%02d", now.hour(), now.minute(), now.second());
  lcd.print(buffer);
  Serial.println(buffer); 
  Serial.println("----------------------");
}

Lo mismo puedes hacer con las demás pero si hay números flotantes hay que hacer una conversión previa.
Si te interesa lo comento luego.

Hola Surbyte,
Gracias por la respuesta. Lo mirare todo con detalle, no estoy en casa ahora pero cuando llegue mirare como puede ir todo.
El problema con las alarmas, es que ni la primera alarma a las 19:39:00 ocurre. En mi caso, lo que tendria que pasar a las 19:39:00 es que los lectores hiciesen una lectura de los datos, y esa lectura imprimirla en la pantalla LCD y en el monitor serial hasta que al cabo de 5 minutos volviesen ha hacer otra lectura y imprimiesen de nuevo estos datos en la pantalla pero esto no ocurre y en la pantalla siempre se muestra un 0.
Cuando llegue a casa lo miro todo con detenimiento.
Gracias otra vez.

He estado mirando todo lo que me dijiste.
El tema de la interrupción del pluviometro parece que lo tengo solucionado y por ahora me va bien.
Respecto a la función sprintf cuando tenga el programa terminado lo mirare bien para mejorar el codigo.
Lo queno consigo que salga es el tema de las lecturas de los sensores. Viendo que con la libreria TimeAlarms no me salia he tirado por condicionales pero tampoco logro que me hagan las lecturas. Lo que quiero es que los sensores de temperatura, humedad y presion hagan una lectura cada 5 minutos concidiendo con los minutos 0/5/10/15/20/25/30/35/40/45/50/55 de cada hora, pero no encuentro manera de que me salga

Revisando he encontrado un error muy importante

int val = 0; //valor actual de interruptor del pluviómetro
int ant_val = 0;  //valor anterior de interruptor del pluviómetro
int comptador = 0;

estas dos variables se usan en una interrupción y deben definirse de este modo

volatile int val = 0; //valor actual de interruptor del pluviómetro
volatile int ant_val = 0;  //valor anterior de interruptor del pluviómetro
volatile int comptador = 0;

Eso para que al menos funcione el pluviómetro, de otro modo no funcionará o dicho mas correctamente, comptador no va a transladar sus lecturas al loop.

Otro problema que veo es delay(10) dentro de una interrupción. Es algo que debes eliminar y reemplazar por milis(). No es una buena práctica su uso en ese contexto.

Ahora bien, veamos porque no te funciona TimeAlarms.
Te aconsejo que pruebes los ejemplos de la librería y me digas si esos si funcionan.

Estuve mirando la libreria TimeAlarms y solo tiene un ejemplo

/*
 * TimeAlarmExample.pde
 *
 * This example calls alarm functions at 8:30 am and at 5:45 pm (17:45)
 * and simulates turning lights on at night and off in the morning
 * A weekly timer is set for Saturdays at 8:30:30
 *
 * A timer is called every 15 seconds
 * Another timer is called once only after 10 seconds
 *
 * At startup the time is set to Jan 1 2011  8:29 am
 */

// Questions?  Ask them here:
// http://forum.arduino.cc/index.php?topic=66054.0

#include <TimeLib.h>
#include <TimeAlarms.h>

AlarmId id;

void setup() {
  Serial.begin(9600);
  while (!Serial) ; // wait for Arduino Serial Monitor

  setTime(8,29,0,1,1,11); // set time to Saturday 8:29:00am Jan 1 2011

  // create the alarms, to trigger at specific times
  Alarm.alarmRepeat(8,30,0, MorningAlarm);  // 8:30am every day
  Alarm.alarmRepeat(17,45,0,EveningAlarm);  // 5:45pm every day
  Alarm.alarmRepeat(dowSaturday,8,30,30,WeeklyAlarm);  // 8:30:30 every Saturday

  // create timers, to trigger relative to when they're created
  Alarm.timerRepeat(15, Repeats);           // timer for every 15 seconds
  id = Alarm.timerRepeat(2, Repeats2);      // timer for every 2 seconds
  Alarm.timerOnce(10, OnceOnly);            // called once after 10 seconds
}

void loop() {
  digitalClockDisplay();
  Alarm.delay(1000); // wait one second between clock display
}

// functions to be called when an alarm triggers:
void MorningAlarm() {
  Serial.println("Alarm: - turn lights off");
}

void EveningAlarm() {
  Serial.println("Alarm: - turn lights on");
}

void WeeklyAlarm() {
  Serial.println("Alarm: - its Monday Morning");
}

void ExplicitAlarm() {
  Serial.println("Alarm: - this triggers only at the given date and time");
}

void Repeats() {
  Serial.println("15 second timer");
}

void Repeats2() {
  Serial.println("2 second timer");
}

void OnceOnly() {
  Serial.println("This timer only triggers once, stop the 2 second timer");
  // use Alarm.free() to disable a timer and recycle its memory.
  Alarm.free(id);
  // optional, but safest to "forget" the ID after memory recycled
  id = dtINVALID_ALARM_ID;
  // you can also use Alarm.disable() to turn the timer off, but keep
  // it in memory, to turn back on later with Alarm.enable().
}

void digitalClockDisplay() {
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println();
}

void printDigits(int digits) {
  Serial.print(":");
  if (digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

Este ejemplo me funciona pero no es lo que quiero, aqui no utiliza un rtc para la hora. Para determinar la hora en este programa lo hace manualmente. Haciendolo así me funciona, pero cuando cambio la funcion
setTime(8,29,0,1,1,11)
por la de
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)))

de la libreria RTClib ya no me saltan las alarmas

Las alarmas deben saltar pero tu reloj obviament esta seteado en otra fecha.
Debes ajustar tu reloj RTC a la fecha en curso. Si miras los ejemplos hay dos programas, uno lee y otro escribe o sea guarda los datos en el RTC. Una forma es como tu bien has puesto.
Ahora bien, una cosa es la fecha del sistema Arduino y otra es la fecha del RTC. Son dos fechas/horas distintas y debes sincronizarlas y se supone que el RTC es quien debe sincronizar a la hora del sistema.

Asi que settime() fija la hora del sistema pero no al RTC.

Bien, para dejar de hablar sobre una cosa o la otra vayamos a un ejemplo y seré muy preciso porque

Este código corresponde a un DS3231.ino RTC

Como verás el código

#include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup () {
  Serial.begin(57600);

#ifndef ESP8266
  while (!Serial); // wait for serial port to connect. Needed for native USB
#endif

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    abort();
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, let's set the time!");
    // When time needs to be set on a new device, or after a power loss, the
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }

  // When time needs to be re-set on a previously configured device, the
  // following line sets the RTC to the date & time this sketch was compiled
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  // This line sets the RTC with an explicit date & time, for example to set
  // January 21, 2014 at 3am you would call:
  // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}

void loop () {
    DateTime now = rtc.now();

    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    Serial.print(") ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();

    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");

    // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now + TimeSpan(7,12,30,6));

    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');


    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();

    Serial.print("Temperature: ");
    Serial.print(rtc.getTemperature());
    Serial.println(" C");

    Serial.println();
    delay(3000);
}

Este código debería funcionar adecuadamente.
Comencemos por esto y luego te digo como continuar.

Como tu dices, me funciona a la perfeccion este programa.

Hola,
El problema con las alarmas lo continuo teniendo.
He puesto adjunto el programa con el que estoy actualmente.
Mi idea es que los sensores hagan una lectura cada 5 minutos coincidiendo con los minutos múltiples de 5 de cada hora.
Tengo una alarma puesta a las 18:00:00 para que los sensores hagas sus lecturas pero esta alarma no me salta.
Yo creo que el problema no esta en el reloj. El reloj y la hora estan programados de la siguiente manera

  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  DateTime data = rtc.now();
  setTime (data.hour(), data.minute(); data.second(), data.month (), data.day(), data.year());

y las alarmas de la siguiente

  Alarm.alarmRepeat(18, 00, 00, lecturaSensors);
  Alarm.timerRepeat(900, lecturaSensors);

Entiendo que hasta que no son las seis de la tarde en punto con 0 segundos la alarma no salta y creo, que tal y como esta planteado el void loop, es dificil que coincida la hora con la hora de la alarma

DateTime data = rtc.now(); 
  Alarm.delay(1000);

  tActual = millis();
  if (tActual - tUCambio >= interval) {
    tUCambio = tActual;
    switch (opcion++) {
      case 1: pantPrinc();
        break;
      case 2: pant1();
        break;
      case 3: pant2();
        break;
      case 4: pant3();
        break;
      case 5: pant4();
        break;
      case 7: pant5();
        break;
      case 8:
      default: opcion = 1;
        break;
    }
  }
}

Estació meteorologica.ino (6.97 KB)

Sube por favor tu última versión del código para poder probarlo.

//ESTACIO METEOROLOGICA
//LLIBRERIES

#include <DS3232RTC.h>
#include <DS3232RTC.h>
#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;
byte opcion = 0;

//Pluviometre
const int pluvi = 19;  //on conectem el pluviometre
volatile int val = 0; //valor actual de l'interruptor del pluviometre
volatile int ant_val = 0;  //valor anterior de l'interruptor del pluviometre
volatile int comptador = 0;
unsigned long tActualpluvi = 0;
unsigned long tUCambiopluvi = 0;
unsigned long intervalpluvi = 10;

//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();
  digitalWrite(2, HIGH);
  Serial.print("Iniciant...");
  attachInterrupt(digitalPinToInterrupt(pluvi), interruptCount, CHANGE);

  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  DateTime data = rtc.now();
  setSyncProvider(RTC.get);
  setSyncInterval(86400000); // sincreonitzem cada 24 h
  setTime (data.hour(), data.minute(), data.second(), data.month (), data.day(), data.year());

  Alarm.alarmRepeat(18, 30, 00, lecturaSensors);
  Alarm.timerRepeat(900, lecturaSensors);
}

void loop() {
  DateTime data = rtc.now();
  Alarm.delay(1000);

  tActual = millis();
  if (tActual - tUCambio >= interval) {
    tUCambio = tActual;
    switch (opcion++) {
      case 1: pantPrinc();
        break;
      case 2: pant1();
        break;
      case 3: pant2();
        break;
      case 4: pant3();
        break;
      case 5: pant4();
        break;
      case 7: pant5();
        break;
      case 8:
      default: opcion = 1;
        break;
    }
  }
}

//Funcions a cridar
void interruptCount() {
  val = digitalRead(pluvi);  //llegim l'estat de l'interruptor del pluviometre
  if ((val == LOW) && (ant_val == HIGH)) {   //comprobem que l'estat a canviat
    if (tActualpluvi - tUCambiopluvi >= intervalpluvi)
      tUCambiopluvi = tActualpluvi;//per evitar rebots
    comptador = comptador + 1; //li sumem 1 al comptador
    ant_val = val;
  }
  else {
    ant_val = val;
  }
}

//Lectura de tots els senors
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();
}
//Totes les pantalles
void pantPrinc () {     //Pantalla principal
  char buffer[20];
  DateTime data = rtc.now();
  lcd.clear();
  lcd.setCursor(5, 0);
  sprintf(buffer, "%s", daysOfTheWeek[data.dayOfTheWeek()]);
  lcd.print(buffer);
  Serial.println(buffer);
  Serial.println();
  lcd.setCursor(0, 1);
  sprintf(buffer, "%02d/%02d/%02d", data.day(), data.month(), data.year());
  lcd.print(buffer);
  Serial.println(buffer);

  lcd.setCursor(0, 2);
  sprintf(buffer, "%02d:%02d:%02d", data.hour(), data.minute(), data.second());
  lcd.print(buffer);
  Serial.println(buffer);
  Serial.println("----------------------");
}
void pant1() {    //Pantalla 1
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Pantalla principal");
  lcd.setCursor(0, 1);
  lcd.print("Temperatura:");
  lcd.print(T);
  lcd.print("*C");
  lcd.setCursor(0, 2);
  lcd.print("Humitat:");
  lcd.print(CH);
  lcd.print("%");
  lcd.setCursor(0, 3);
  lcd.print("SensacioTermica:");
  lcd.print(sensTerm);
  lcd.print("ºC");
  Serial.println("Pantalla principal");
  Serial.print("Temperatura:");
  Serial.print(T);
  Serial.println("ºC");
  Serial.print("Humitat");
  Serial.print(CH);
  Serial.println("%");
  Serial.print("Sensació Tèrmica:");
  Serial.print(sensTerm);
  Serial.println("ºC");
  Serial.println("----------------------");
}
void pant2 () {   //Pantalla 2
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("HTU21D");
  lcd.setCursor(0, 1);
  lcd.print("Temperatura:");
  lcd.print(T);
  lcd.println("*C");
  lcd.setCursor(0, 2);
  lcd.print("Humitat:");
  lcd.print(H);
  lcd.print("%");
  lcd.setCursor(0, 3);
  lcd.print("Humitat compensada:");
  lcd.print(CH);
  lcd.print("%");
  Serial.println("HTU21D");
  Serial.print("Temperatura:");
  Serial.print(T);
  Serial.println("ºC");
  Serial.print("Humitat:");
  Serial.print(H);
  Serial.println("%");
  Serial.print("Humitat Compensada:");
  Serial.print(CH);
  Serial.println("%");
  Serial.println("----------------------");
}
void pant3() {    //Pantalla 3
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("dht22");
  lcd.setCursor(0, 1);
  lcd.print("Temperatura:");
  lcd.print(t);
  lcd.print("*C");
  lcd.setCursor(0, 2);
  lcd.print("Humitat:");
  lcd.print(h);
  lcd.print("%");
  lcd.setCursor(0, 3);
  lcd.print("SensacioTermica:");
  lcd.print(sensTerm);
  lcd.print("ºC");
  Serial.println("DHT");
  Serial.print("Temperatura:");
  Serial.print(t);
  Serial.print("ºC");
  Serial.print("Humitat:");
  Serial.print(h);
  Serial.println("%");
  Serial.print("Sensació Tèrmica:");
  Serial.print(sensTerm);
  Serial.println("ºC");
  Serial.println("----------------------");
}
void pant4() {      //Pantalla 4

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print ("Barometre");
  lcd.setCursor(0, 1);
  lcd.print("La pressió es:");
  lcd.print(pressio);
  lcd.print("hPa");
  lcd.setCursor(0, 2);
  lcd.print("Altura:");
  lcd.print(alt);
  lcd.print("m");
  Serial.println("Barometre");
  Serial.print("a pressió es:");
  Serial.print(pressio);
  Serial.println("hPa");
  Serial.print("Altura:");
  Serial.print(alt);
  Serial.println("m");
  Serial.print("Temperatura:");
  Serial.print(temp);
  Serial.print("Humitat:");
  Serial.println("ºC");
  Serial.print(hum);
  Serial.println("%");
  Serial.println("----------------------");
}
void pant5() {      //pantalla 5
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Pluja caiguda");
  lcd.setCursor(0, 1);
  lcd.print("Precipitació:");
  lcd.print(comptador);
  lcd.print("cops");
  lcd.setCursor(0, 2);
  lcd.print("Precipitacio:");
  lcd.print(comptador * 0.0138);
  lcd.print("mm");
  Serial.println("Pluja caiguda");
  Serial.print("Precipitació:");
  Serial.print(comptador);
  Serial.println("cops");
  Serial.print("Mesura de la pluja:");
  Serial.print(comptador * 0.0138);
  Serial.println("mm");
  Serial.println("----------------------");
}

Mira tu código

#include <DS3232RTC.h> // <== 
#include <DS3232RTC.h>         // <== REPETIDA
#include <TimeLib.h>
#include <TimeAlarms.h>
#include <BH1750.h>
#include <Adafruit_BME280.h>
#include <RTClib.h>                 // <== REPETIDA
#include <Wire.h>
#include <HTU21D.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <DHT_U.h>

Tienes 3 librerias para pretender hacer lo mismo, y esperas que funcionen las Alarmas.

Corrige eso y quédate con una sola.