Gestire il passaggio Ora Legale e Solare con RTC Dallas DS1302

stavo programmando una scheda Arduino UNO R3 come studio di un ipotetico termostato intelligente con controllo da remoto; usando un RTC DS1302 mi sono imbattuto in alcuni problemi tecnici non trascurabili per il mio uso:
questo chip non prevede il passaggio da ora solare a legale e viceversa; detta anche daylight saving time ( DST) per gli americani.
Ebbene da Noi ci sono delle regole ben precise che mi hanno portato a generare un piccolo Check per correggere l'ora in questi 2 giorni l’anno.
Conoscendo le precise regole di passaggio tutti possono realizzare e comprendere il codice scritto:
<< si fissò l'inizio dell'ora legale alle ore 2:00 del mattino dell'ultima domenica di marzo e il termine alle 3:00 del mattino dell'ultima domenica di ottobre >>
La mia è una Routine Void che si avvale della presenza delle librerie discusse su un altro Topic (http://forum.arduino.cc/index.php/topic,37936.0.html ) e che rimandano al pacchetto di gestione semplice per il DS1302 (Electronics - Henning Karlsen ) tutto testato e perfettamente funzionante.
Questo per farvi capire che alcuni richiami a funzioni o strutture è legato a queste librerie (ES. t.mon che restituisce il valore decimale relativo a mese); chiedo venia se qui io ora non faccio un trattato anche sulle librerie discusse sui link sopra menzionati.
Come dichiarazioni occorrono queste variabili
boolean attendiS31=false,attendiL31=false,attendiSdom=false,attendiLdom=false;
introdurre quindi all’interno del vostro firmware (io l’ho usato alla fine dei tutti i cicli nel Loop)
ckDSTtime();
quindi il seguente codice esternamente al programma.

void ckDSTtime()
{ if (t.mon==10) //confronta  il mese in corso con Ottobre 
      {if (t.date==24) // confronta se siamo il 24 del mese
         {if (t.dow==7) //se il giorno della settimana è domenica significa che esiste ancora una domenica, il 31.
             { //attendi data corretta il 31
               attendiS31=true; //attiva il check relativo all’ora solare per il 31 del mese
               //Serial.println(attendiS31); //per debug
             }
          else
             {//attendi data corretta domenica prossima
               attendiSdom=true; //attiva il check per tenere sotto controllo la domenica successiva
               //Serial.println(attendiSdom); //per debug
             }
         }
      }

if (attendiS31)
    {
   if (t.date==31) //se siamo arrivati al 31 del mese di ottobre è domenica…
         {if (t.hour==3) //…alle 3 di notte si cambia ora
             { rtc.setTime(t.hour-1, t.min, t.sec); //scala di 1 ora sull’ RTC
               //Serial.println("Passaggio all'ora solare: -1 ora"); //per debug
               attendiS31=false; //disattiva check
             }
         }  
    }
if (attendiSdom)
    {
   if (t.dow==7) //verifica l’arrivo della domenica
         {if (t.hour==3) //alle 3 di notte si cambia ora
             { rtc.setTime(t.hour-1, t.min, t.sec); //scala di 1 ora sull’ RTC
               //Serial.println("Passaggio all'ora solare: -1 ora"); //per Debug
               attendiSdom=false; //disattiva check
             }
         }  
    }
  if (t.mon==3) //qui vediamo allo stesso modo se è invece Marzo
      {if (t.date==24)  //stessa regola del 24…
         {if (t.dow==7)  //se è domenica vuol dire che l’ultima è il 31 e lo attende
             { //attendi data corretta il 31
               attendiL31=true;
               //Serial.println(attendiL31);
             }
          else
             {//attendi data corretta domenica prossima
               attendiLdom=true;
               //Serial.println(attendiLdom);
             }
         } 
      }
      
 if (attendiL31)
    {
   if (t.date==31)
         {if (t.hour==2) //qui bastano le 2 di notte per aggiungere 1 ora
             { rtc.setTime(t.hour+1, t.min, t.sec);
               //Serial.println("Passaggio all'ora legale: +1 ora"); //per Debug
               attendiL31=false; //disattiva il check
             }
         }  
    }
 if (attendiLdom)
    {
   if (t.dow==7)
         {if (t.hour==2)
             { rtc.setTime(t.hour+1, t.min, t.sec);
               Serial.println("Passaggio all'ora legale: +1 ora");
               attendiLdom=false;
             }
         }  
    }
  }