Fallo en el programa

Hola, buenas noches.
He creado un programa con mi Arduino Mega 2560 para usarlo como una estación de temperatura y humedad, con controles por sensor ir y también da la hora y la fecha. Al cargar el programa, el programa se ejecuta solo hasta base = HIGH en el setup, y se queda el led integrado del pin 13 parpadeando y no cesa nunca, se queda en bucle. Como podréis ver en el código, he puesto la comunicación serie al principio, para poder determinar donde se queda congelado exactamente el programa, y he observado que se queda en Serial.println(" base ok"); que me lo manda en bucle al puerto serie todo el rato. También he notado que si este mensaje( base ok) lo pongo más largo (ejemplo: la base está bien), me lo manda en bucle también, pero me corta el mensaje y no lo manda entero.
EDIT: tengo este mismo proyecto, pero sin el sensor ir, lo tengo con unos botones, y no me hace esto. He estado leyendo su librería y la tengo actualizada, no sé qué puede ser, y quiero solucionarlo, porque me es más fácil controlarlo a distancia. Gracias por la ayuda.
EDIT 2: Para quien quiera saber qué es lo de base, es un transistor 2222a que tengo puesto para poder apagar por completo la pantalla con el mando. También tengo el mismo proyecto con el ir y tal... pero sin el transistor, y tampoco funcionaba.

#include <IRremote.h>
#include <IRremoteInt.h>
#include <DHT.h>
#include <DHT_U.h>
#include <RTClib.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#define RS 10
#define E 8
#define D4 7
#define D5 4
#define D6 3
#define D7 2
#define base 12
#define Sensor 22
#define IR 23
#define POWER 0xFFA25D
#define FUNCION 0xFFE21D
#define VOL+ 0xFF629D
#define VOL- 0xFFA857
#define PAUSE 0xFF02FD
#define BACK 0xFF22DD
#define FORWARD 0xFFC23D
int power = 1;
int temp;
int humedad;
int modo = 1;
int estado;
LiquidCrystal lcd (RS, E, D4, D5, D6, D7);
DHT dht (Sensor, DHT11);
RTC_DS3231 rtc;
void setup() {
  Serial.begin(9600);
  pinMode(base, OUTPUT);
  digitalWrite(base, HIGH);
  Serial.println(" base ok");
  Wire.begin();
  Serial.println("wire begin");
  rtc.adjust(DateTime(__DATE__,__TIME__));
  dht.begin();
  lcd.begin(16, 2);
  lcd.setCursor(4, 0);
  lcd.print("Iniciando");
  lcd.setCursor(5, 1);
  lcd.print("sistema");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0, 0);
  IrReceiver.begin(IR, DISABLE_LED_FEEDBACK);
}
void loop(){  
  DateTime fecha = rtc.now();
  humedad = dht.readHumidity();
  temp = dht.readTemperature();
  estado = digitalRead(base);
  
  if (power = 1){
    digitalWrite(base, HIGH);
    }
  if (power = false){
    digitalWrite(base, LOW);
    }
  if (IrReceiver.decode()) {
    switch (IrReceiver.decodedIRData, HEX){
      case POWER:
      if (estado == HIGH){
        power = 0;
      }
      if (estado == LOW){
        power = 1;
      }
      IrReceiver.resume();
      break;
      case FUNCION:
      if (modo == 1){
        modo = 0;
        delay(10);
      }
      if (modo == 0){
        modo = 1;
        delay(10);
      }
    }
  }
  if (modo == 1){
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Temp:");
    lcd.setCursor(10, 0);
    lcd.print(temp);
    lcd.print((char)223);
    lcd.print("C");
    lcd.setCursor(0, 1);
    lcd.print("Humedad:");
    lcd.setCursor(10, 1);
    lcd.print(humedad);
    lcd.print("%");
    delay(500);
  }
  if (modo == 0){
    lcd.clear();
    lcd.setCursor(4, 0);
    lcd.print(fecha.hour(), DEC);
    lcd.print(":");
    lcd.print(fecha.minute(), DEC);
    lcd.print(":");
    lcd.print(fecha.second(), DEC);
    lcd.setCursor(3, 1);
    lcd.print(fecha.day(), DEC);
    lcd.print("/");
    lcd.print(fecha.month(), DEC);
    lcd.print("/");
    lcd.print(fecha.year(), DEC);
    delay(500);
  }
}

Hola añade justo al principio de tu " setup ":

  if (!rtc.begin()) {
    myDisplay.print("No-Rtc");
    delay (3000);
  }

Veo que llamas al RTC :

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

Antes de haberlo inicializado.
Saludos.

No es de eso Pero te faltaba. sigo mirando...
PD: ¿a que pines has conectado el RTC? recuerda en el mega, (BUS I2C), son el 20 y 21 y si eliminas cualquier llamada al RTC el programa no se cuelga.

¿Esto

#define E 8

no reemplaza cualquier ocurrencia de 'E' por '8'?

Me respondo solo: NO

Buenos días, lo tengo conectado en el 20 y en el 21, pero también he de decir que me funcionaba en los pines sda y scl al lado del pin 13. En este programa no funciona en ninguna de las dos opciones.

Si, esto lo reemplaza. En otros programas lo tengo así y me funciona bien.

Lo de añadir al setup, voy a hacerlo y os digo qué ocurre. Respecto a lo de "llamarlo", primero se inicia wire.begin, después lo llamo.

Por cierto, se me ha olvidado mencionarlo al principio, al conectar la placa arduino con su voltaje, el programa no se inicializa solo, ni si quiera hasta el bucle, le tengo que dar al reset de la placa, y entonces´ya se inicializa, y se queda en ese bucle.

Hola, acabo de meter eso al principio del setup, y me dice que myDisplay no está declarado.

#include <Wire.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <DHT.h>
#include <DHT_U.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
#define RS 10
#define E 8
#define D4 7
#define D5 4
#define D6 3
#define D7 2
#define base 12
#define Sensor 22
#define IR 23
#define POWER 0xFFA25D
#define FUNCION 0xFFE21D
#define VOL+ 0xFF629D
#define VOL- 0xFFA857
#define PAUSE 0xFF02FD
#define BACK 0xFF22DD
#define FORWARD 0xFFC23D
int power = 1;
int temp;
int humedad;
int modo = 1;
int estado;
LiquidCrystal lcd (RS, E, D4, D5, D6, D7);
DHT dht (Sensor, DHT11);
RTC_DS3231 rtc;
void setup() {
  if (!rtc.begin()) {
    myDisplay.print("No-Rtc");
    delay (3000);
  Serial.begin(9600);
  pinMode(base, OUTPUT);
  digitalWrite(base, HIGH);
  Serial.println(" base ok");
  Wire.begin();
  Serial.println("wire begin");
  rtc.adjust(DateTime(__DATE__,__TIME__));
  dht.begin();
  lcd.begin(16, 2);
  lcd.setCursor(4, 0);
  lcd.print("Iniciando");
  lcd.setCursor(5, 1);
  lcd.print("sistema");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0, 0);
  IrReceiver.begin(IR, ENABLE_LED_FEEDBACK);
}
void loop(){  
  DateTime fecha = rtc.now();
  humedad = dht.readHumidity();
  temp = dht.readTemperature();
  estado = digitalRead(base);
  
  if (power = 1){
    digitalWrite(base, HIGH);
    }
  if (power = false){
    digitalWrite(base, LOW);
    }
  if (IrReceiver.decode()) {
    switch (IrReceiver.decodedIRData, HEX){
      case POWER:
      if (estado == HIGH){
        power = 0;
      }
      if (estado == LOW){
        power = 1;
      }
      IrReceiver.resume();
      break;
      case FUNCION:
      if (modo == 1){
        modo = 0;
        delay(10);
      }
      if (modo == 0){
        modo = 1;
        delay(10);
      }
    }
  }
  if (modo == 1){
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Temp:");
    lcd.setCursor(10, 0);
    lcd.print(temp);
    lcd.print((char)223);
    lcd.print("C");
    lcd.setCursor(0, 1);
    lcd.print("Humedad:");
    lcd.setCursor(10, 1);
    lcd.print(humedad);
    lcd.print("%");
    delay(500);
  }
  if (modo == 0){
    lcd.clear();
    lcd.setCursor(4, 0);
    lcd.print(fecha.hour(), DEC);
    lcd.print(":");
    lcd.print(fecha.minute(), DEC);
    lcd.print(":");
    lcd.print(fecha.second(), DEC);
    lcd.setCursor(3, 1);
    lcd.print(fecha.day(), DEC);
    lcd.print("/");
    lcd.print(fecha.month(), DEC);
    lcd.print("/");
    lcd.print(fecha.year(), DEC);
    delay(500);
  }
}

Fallo mio por cotar pegar sin iniciar antes el lcd:

void setup() {
lcd.begin(16, 2);
  if (!rtc.begin()) {
    myDisplay.print("No-Rtc");
    delay (3000);
  Serial.begin(9600);
etc
etc