Problema con set di più allarmi con TimeAlarms e Rtc ds 1307

Salve a tutti, sto facendo una serra utilizzando un Arduino UNO e ho in mente di sottoporre a due periodi di luce la pianta, corrispondenti a diverse fasi di crescita. Accendo la lampada tramite un relè, per farlo ho scritto questo sketch in cui creo due funzioni (VEGETATIVA e FIORITURA) che contengono due allarmi creati con le librerie Time e TimeAlarms di Michael Margolis

void VEGETATIVA ()                  
 {                              
  Alarm.alarmRepeat(4,0,0, ACCESOLAMPADA);              //ALLARME ACCENSIONE  (!!!COMANDI INVERTITI!!!)
  Alarm.alarmRepeat(22,0,0, SPENTOLAMPADA);             //ALLARME SPEGNIMENTO (FUNZIONA SUL TEMPO DI TIME)
 }
void FIORITURA ()
 {                                
  Alarm.alarmRepeat(8,0,0, ACCESOLAMPADA);              //ALLARME ACCENSIONE  (!!!COMANDI INVERTITI!!!)
  Alarm.alarmRepeat(20,0,0, SPENTOLAMPADA);             //ALLARME SPEGNIMENTO (FUNZIONA SUL TEMPO DI TIME)
 }
void ACCESOLAMPADA ()                                   //FUNZIONE ACCENSIONE LAMPADA 
 {                              
  digitalWrite(lampada, LOW);   
 }
void SPENTOLAMPADA()                                   //FUNZIONE SPEGNIMENTO LAMPADA
 {                                
  digitalWrite(lampada, HIGH);    
 }

I comandi di accensione e spegnimento lampada sono invertiti perché il relè che uso inverte i segnali che mando da Arduino. libreria Time Alarms
libreria Time. una libreria per il controllo dell'RTC (il ds1307) mi permette di sincronizzare l'rtc con Arduino perché la libreria TimeAlarms funziona con l'orario di Arduinolibreria DS1307.
Ecco il setup dello sketch:

  lcd.begin(16, 2);                              //INIZIALIZZAZIONE LCD   
  pinMode(A3, OUTPUT);                           //Vcc RTC
  digitalWrite(A3, HIGH);                        ////
  pinMode(A2, OUTPUT);                           //GND RTC
  digitalWrite(A2, LOW);                         ////*/
  pinMode(lampada, OUTPUT);                      //IMPOSTO PIN LAMPADA COME OUTPUT
  digitalWrite(lampada, HIGH);
  pinMode(bottone, INPUT);                       //IMPOSTO PIN BOTTONE COME INPUT
  lcd.setCursor(0,0);
  lcd.print("    NANOSERRA");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("TIME");  
  if (!RTC.chipPresent()) {
        //Serial.println("RTC not present");
        lcd.setCursor(0,1);
        lcd.print("NO RTC");
        delay(2000);
        lcd.clear();
  }else{  
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
  switch (timeStatus()) {
    case timeNotSet:     //("Time's clock has not been set.  The time & date are unknown.");
                         lcd.setCursor(0,1);
                         lcd.print("Time FAILED");
                         delay(2000);
                         lcd.clear();
                         break;
    case timeSet:        //("Time's clock has been set.");
                         lcd.setCursor(0,1);
                         lcd.print("Time OK!");
                         delay(2000);
                         lcd.clear();
                         break;
    case timeNeedsSync:  //("Time's clock is set, but the sync has failed, so it may not be accurate.");     
                         lcd.setCursor(0,1);
                         lcd.print("TIMEOKSYNCFAIL");
                         delay(2000);
                         lcd.clear();
                         break;
                         }
       }
if (periodo == LOW){
    VEGETATIVA();    
  }else{
    FIORITURA();
  }

Durante il funzionamento voglio far cambiare, tramite la pressione di un pulsante, il periodo; ad ogni pressione viene cambiata da un periodo all'altro. riesco a far cambiare il periodo ma non cambia l'allarme. Uso questa parte di codice per il bottone:

//***********************BOTTONE********************************//
   leggibottone=digitalRead(bottone);
     if (leggibottone == HIGH ) //OGNI VOLTA CHE PREMI IL BOTTONE
     {delay(15);
      if (periodo == LOW )      // E IL PERIODO EQUIVALE A LOW
      {
        periodo = HIGH;         //IMPOSTALO A HIGH
        FIORITURA;
      } else {
        periodo = LOW;          //SE IL PERIODO EQUIVALE A HIGH IMPOSTALO A LOW
        VEGETATIVA;
          }
     }
    delay(500);
}

Non so se è realmente fattibile perché la parte di programma del bottone è nella parte di loop ma gli allarmi devono essere settati nel setup... secondo voi è possibile farlo? nella parte di loop dello sketch ho anche messo Alarm.delay() necessario a far attivare l'allarme.
Ho anche un'altro problema con il collegamento dell'RTC (Datasheet ds1307) vella parte di codice sopra ho scritto dichiarando i pin analogici come output mettendone un a HIGH e l'altro a LOW in modo da fare da vcc e gnd all'Rtc e non usare cavi per attaccare l'Rtc a Arduino.. mi viene dato un'errore durante l'esecuzione del programma in cui dice di non vedere l'Rtc, ma in altri programmi con la stessa configurazione il prgramma funziona senza problemi quindi non è la connessione ma probabilmente un errore nel programma che non riesco a vedere o che non conosco proprio.
Grazie dell'attenzione e dell'aiuto, spero di essere stato chiaro e di aver rispettato tutte le regole del forum. Sono alle prime armi con la programmazione e con l'elettronica in generale quindi vorrei scusarmi in anticipo per eventuali "orrori".

Grazie a tutti delle risposte esaustive che mi avete dato, evidentemente non interesserà a nessuno questo progetto.

Prima di tutto considera che qui TUTTI aiutano in modo VOLONTARIO senza alcuna retibuzione o compenso, quindi, NESSUNO è obbligato a risponderti né tu puoi pretendere risposte ...

... poi, probabilmete, per tre/quattro giorni non è passato qualcuno specificatamente interessato all'argomento ... ci vuole pazienza ed educatamente, ogni paio di giorni magari fare un piccolo "up" ... prima o poi qualcuno interessato capita.

Vedi un po tu ... ::slight_smile:

Guglielmo

Ma sei sicuro che quella libreria possa sopportare piú di un alarme contemporaneamente?
Ciao Uwe