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