Como declarar global variable de fecha del RTC ??

Hola

Tengo una funcion para manejo de la fecha con el DS1307 en el que manejo una variable llamada future (en el codigo que pongo podreis verla):

// ┌──────────────────────────────────────────────┐
// │  FUNCION Muestra Hora                                                           │
// └──────────────────────────────────────────────┘
void Muestra_hora(){
    Hora_Peninsular();
 
    // Hora real GMT sin los ajustes de +1 o +2 de invierno o verano
    DateTime now = RTC.now();      
    
    // Hora adelantada en funcion de verano o invierno
    DateTime future (now.unixtime() + 3600*adelanto); 

    // Muestra la fecha en la columna superior
    lcd.setCursor(0,0);
    lcd.print("Fecha 00-00-0000");
    
    if (future.day() < 10){lcd.setCursor(7,0);} else {lcd.setCursor(6,0);}
    lcd.print(future.day(), DEC);

    if (future.month() < 10){lcd.setCursor(10,0);} else {lcd.setCursor(9,0);}
    lcd.print(future.month(), DEC);

    lcd.setCursor(12,0);
    lcd.print(future.year(), DEC);

    // Muestra la hora en columna inferior
    lcd.setCursor(0,1);
    lcd.print("Hora       00:00");
    
    if (future.hour() < 10){lcd.setCursor(12,1);} else {lcd.setCursor(11,1);}
    lcd.print(future.hour(), DEC);
    
    if (future.minute() < 10){lcd.setCursor(15,1);} else {lcd.setCursor(14,1);}
    lcd.print(future.minute(), DEC);

    delay(900);
    lcd.setCursor(13,1);
    lcd.print(' ');
    delay(100);
}

Esta variable es la que empleo para dejar el reloj del RTC a la hora GMT (UTC) y sumandole una hora mas o dos horas mas (como nos puso el codigo el compañero Curro92) mostrar o calcular funciones de horas.

El problema es que, por ejemplo, hago una llamada a "future.day()" y al compilar me dice el ide del arduino esto:
<>

Por lo que entiendo que, si no la declaro global, no puede manejarla, y ese es el problema, no se como declarar "future" de forma global y accesible en el programa.

La llamada la hago asi:

 Descompone(future.day());

Siendo descompone una funcion para separar unidades y decenas:

// ┌──────────────────────────────────────────────┐
// │  FUNCION Descompone a decenas y unidades                                        │
// └──────────────────────────────────────────────┘
void descompone (int valor){
    if(10 - val > 0){
    Unidad = val;
    Decena = 0;
    }
else if(20 - val > 0){
    Unidad = val - 10;
    Decena = 1;
    }
else if(30 - val > 0){
    Unidad = val - 20;
    Decena = 2;
    }
else if(40 - val > 0){
    Unidad = val - 30;
    Decena = 3;
    }
else if(50 - val > 0){
    Unidad = val - 40;
    Decena = 4;
    }
else if(60 - val > 0){
    Unidad = val - 50;
    Decena = 5;
    }
}

El caso es que cuando llamo a la funcion asi para mostrarla en el lcd, no me da error:

// ┌──────────────────────────────────────────────┐
// │  FUNCION Muestra Hora                                                           │
// └──────────────────────────────────────────────┘
void Muestra_hora(){
    // Carga la hora nuestra 
    Hora_Peninsular();

    // Muestra la fecha en la columna superior
    lcd.setCursor(0,0);
    lcd.print("Fecha 00-00-0000");
    
    if (future.day() < 10){lcd.setCursor(7,0);} else {lcd.setCursor(6,0);}
    lcd.print(future.day(), DEC);

Y aqui ya no se seguir... y solicito vuestra ayuda si es posible.

Un saludo

Haz que la función te devuelva future: DateTime Muestra_hora() y luego en el código return future; para guardarlo en una variable y poder usarlo.

Lo mejor es evitar siempre que sea posible las variables globales, porque ensucian mucho el código.

Muchas Gracias Chiva

He intentado seguir tus indicaciones a lo que he declarado esta funcion para dejar todo en un sitio:

// ┌────────────────────────────────────────────────────────────────┐
// │  FUNCION Carga la hora con los ajustes de la hora peninsular                    │
// └────────────────────────────────────────────────────────────────┘
DateTime Carga_Hora(){  
    // Hora real GMT sin los ajustes de +1 o +2 de invierno o verano
    DateTime now = RTC.now();   
  
    // Comprueba si es invierno o verano para adelantar 2 o 1 hora
    if(now.month() == 3 && now.day() > 24 && now.dayOfWeek() == 7)
    {
    if(adelanto == INVIERNO) adelanto = VERANO;
    }

    if(now.month() == 10 && now.day() > 24 && now.dayOfWeek() == 7)
    {
     if(adelanto == VERANO) adelanto = INVIERNO;
    }
 
    // Hora adelantada en funcion de verano o invierno
    DateTime future (now.unixtime() + 3600*adelanto); 
 
    return future;
}

Pero ahora el compilador me manda a la cabecera y me dice esto:
'DateTime' does not name a type

Yo creo que me pide de nuevo que sea global, pero no lo entiendo, aqui ya me pierdo.

Pues ahí ya me pillas, como no sea problema de scope con los tipos de datos...

Gracias Chiva, no te preocupes, intentare hacer otra programacion porque la verdad, no consigo saltar este "bache" ni lo entiendo.

Un saludo.