Problema compilazione :(

Mi sto scervellando, ma non riesco a capire dove sia il problema.
Non appena includo la libreria DS1307.h ottengo questo messaggio di errore:

In file included from D:\MF\PERS\ARDUINO\arduino-0022\hardware\arduino\cores\arduino/WProgram.h:6,
from ORARIO_Convertito.cpp:2:
d:/mf/pers/arduino/arduino-0022/hardware/tools/avr/lib/gcc/…/…/avr/include/math.h:439: error: expected unqualified-id before ‘double’
d:/mf/pers/arduino/arduino-0022/hardware/tools/avr/lib/gcc/…/…/avr/include/math.h:439: error: expected )' before 'double' d:/mf/pers/arduino/arduino-0022/hardware/tools/avr/lib/gcc/../../avr/include/math.h:439: error: expected )’ before ‘double’

La stessa libreria è perfettamente funzionante se viene inclusa in qualunque altro codice che ho già avuto modo di provare, quindi non capisco dove stia il problema. Oltretutto se commento l’unica riga dove si fa uso del ds1307 mi da comunque l’errore!

Sono disperato…

#include <DS1307.h>
#include <WProgram.h>
#include <Wire.h>

int OraIA = 7;
int MinIA = 30;
int OraFA = 8;
int MinFA = 0;
int OraIT = 22;
int MinIT = 0;
int OraFT = 22;
int MinFT = 30;
byte FaderLuci; //Tiene in memoria il livello di fading delle luci (da 0 a 255)
unsigned long IA;
unsigned long FA;
unsigned long IT;
unsigned long FT;
unsigned long Mezzanotte = 86399;

unsigned long OraMinutiSecondiInSecondi (byte h, byte m, byte s) //Converte l'orario in secondi (da 0 a 86399 sec)
{
	return h * 60 * 60 + m * 60 + s;
}

void setup()
{
	Serial.begin(9600);
	pinMode(11, OUTPUT); //Piedino PWM di prova con un LED
	IA = OraMinutiSecondiInSecondi (OraIA, MinIA, 0); //Contiene l'orario espresso in secondi dell'inizio dell'alba
	FA = OraMinutiSecondiInSecondi (OraFA, MinFA, 0); //Contiene l'orario espresso in secondi della fine dell'alba
	IT = OraMinutiSecondiInSecondi (OraIT, MinIT, 0); //Contiene l'orario espresso in secondi dell'inizio del tramonto
	FT = OraMinutiSecondiInSecondi (OraFT, MinFT, 0); //Contiene l'orario espresso in secondi della fine del tramonto
}

void loop() //Funzione di gestione delle luci nel fotoperiodo
{
	unsigned long OraAttuale = OraMinutiSecondiInSecondi (RTC.get(DS1307_HR,true), RTC.get(DS1307_MIN,false), RTC.get(DS1307_SEC,false)); //Mi salvo l'ora attuale in una variabile perchè sia sempre lo stesso valore all'interno di un singolo loop
	//Se sono nel fotoperiodo (tiene conto anche dell'accavallamento con la mezzanotte)
	if (((IA > FT) && !(OraAttuale > FT && OraAttuale < IA)) || ((IA < FT) && (OraAttuale >= IA && OraAttuale <= FT)))
	{
		//Inserire qui il comando per accendere (o controllare che sia giè acceso) il rele delle luci
		//Se sono nella luce piena
		if ((FA < IT && OraAttuale >= FA && OraAttuale < IT) || (FA > IT && (OraAttuale < IT || OraAttuale >= FA)))
		{
			FaderLuci = 255;
			analogWrite(11,FaderLuci);
		}
		//Se sono durante l'alba
		else if ((IA < FA && OraAttuale >= IA && OraAttuale < FA) || (IA > FA && (OraAttuale >= IA || OraAttuale < FA)))
		{
			//Se l'alba non è a cavallo della mezzanotte
			if (IA < FA)
			{
				FaderLuci = (OraAttuale - IA) * (255 / (FA - IA));
				analogWrite(11,FaderLuci);
			}
			else //Se l'alba è a cavallo della mezzanotte
			{
				if (OraAttuale >= IA) //Se l'ora attuale è prima della mezzanotte
				{
					FaderLuci = (OraAttuale - IA) * (255 / ((Mezzanotte - IA) + FA));
					analogWrite(11,FaderLuci);
				}
				else //Se l'ora attuale è dopo la mezzanotte
				{
					FaderLuci = (Mezzanotte - IA + OraAttuale) * (255 / ((Mezzanotte - IA) + FA));
					analogWrite(11,FaderLuci);
				}
			}
		}
		else //Se sono durante il tramonto
		{
			//Se il tramonto non è a cavallo della mezzanotte
			if (IT < FT)
			{
				FaderLuci = ((FT - IT) - (OraAttuale - IT)) * (255 / (FT - IT));
				analogWrite(11,FaderLuci);
			}
			else //Se il tramonto è a cavallo della mezzanotte
			{
				if (OraAttuale >= IT) //Se l'ora attuale è prima della mezzanotte
				{
					FaderLuci = (((Mezzanotte - IT) + FT) - (OraAttuale - IT)) * (255 / ((Mezzanotte - IT) + FT));
					analogWrite(11,FaderLuci);
				}
				else //Se l'ora attuale è dopo la mezzanotte
				{
					FaderLuci = (((Mezzanotte - IT) + FT) - ((Mezzanotte - IT) + OraAttuale)) * (255 / ((Mezzanotte - IT) + FT));
					analogWrite(11,FaderLuci);
				}
			}
		}
	}
	else //Se non sono nel fotoperiodo
	{
		//Inserire qui il comando per spengere (o controllare che sia giè spento) il rele delle luci
	}
}

HO TROPPO RISOLTO!
Non ho capito perchè, ma spostando #include <DS1307.h> dopo le altre include, ho compilato tutto a meraviglia!

probabilmente perchè la libreria usa costrutti e/o funzioni delle altre 2 librerie, e il compilatore è un pò "stupido" perchè trova dei comandi sconosciuti e ti da errore senza prima controllare le librerie successive.

Infatti hai risolto spostando l'include :)

certo che la libreria avrebbe dovuto autoincludersi quelle classi... mavabè

ah dovresti usare import anzichè include, perchè import fa in modo tale che se una classe è scitta male, e importa le librerie che stai già usando da un'altra parte, non genera errore. probabilmente chi ha scritto quella classe non conosceva questo particolare :)

Visto che siamo in tema... una curiosità: ma se io di una libreria utilizzo ad esempio un solo comando, poi una volta che compilo il mio sketch, questo occuperà lo spazio della libreria intera o solo di quella porzione di codice che utilizza tale comando?

non sono per niente certo, però credo che se è una classe aggiunge tutto, se una libreria solo la funzione e eventualei funzioni dipendenti