eventi regolari con incremento variabile ed RTC [RISOLTO]

Buonasera,
con questo codice:

#include <Wire.h>
#include <HCRTC.h>
#include <TimeLib.h>
#include <TimeAlarms.h>
#include "RTClib.h"
#define I2CDS1307Add 0x68
HCRTC HCRTC;
RTC_DS1307 RTC;
const byte pompa = 3;
int lettura;
unsigned long tempoPrecedente = 0, intervallo = 1000;
void setup()
{
  pinMode(pompa, OUTPUT);
  Serial.begin(9600);
  unsigned int cadenza = 60; // 60secondi
  Alarm.timerRepeat(cadenza, Allarme);
  RTC_DS1307 RTC;
  RTC.begin();
  Wire.begin();
  HCRTC.RTCWrite(I2CDS1307Add, 17, 6, 1, 8, 0, 0, 1); //impostare una data predefinita
  HCRTC.RTCRead(I2CDS1307Add);
}
void loop()
{
  HCRTC.RTCRead(I2CDS1307Add);
  unsigned long tempoAttuale = millis();
  Serial.println(HCRTC.GetTimeString());
  Alarm.delay(1000);

}
void Allarme()
{
  Serial.println("allarme attivo");
  HCRTC.RTCRead(I2CDS1307Add);
  unsigned int tempoAccensioneMinuti = 0;
  unsigned int tempoAccensioneSecondi = 15;
  while ((HCRTC.GetMinute() <= tempoAccensioneMinuti) || (HCRTC.GetSecond() <= tempoAccensioneSecondi))
  {
    HCRTC.RTCRead(I2CDS1307Add);
    digitalWrite(pompa, HIGH);
    lettura = digitalRead(pompa);
    Serial.print("la pompa è: ");
    if (lettura == HIGH)
      Serial.print("ACCESA");
    else Serial.println("SPENTA");
  }
  if  ((HCRTC.GetMinute() > tempoAccensioneMinuti) || (HCRTC.GetSecond() > tempoAccensioneSecondi))
  {
    digitalWrite(pompa, LOW);
    lettura = digitalRead(pompa);
    Serial.print("la pompa è: ");
    if (lettura == LOW)
      Serial.print("SPENTA");
    else Serial.println("HIGH");
  }
}

ogni minuto accende la pompa…con la libreria HCRTC posso tranquillamente impostarmi per quanto tempo deve restare accesa…però ho un problema. Ho un RTC comandato dalla libreria HCRTC e RTClib e un timer comandato da TimeLib e TimeAlarms.
Se io imposto la variabile tempoAccensioneSecondi operando in RTC, non è detto che quando si richiama l’allarme l’HCRTC.GetSecond() sia == 0 ma potrebbe essere anche 20 e cosi la chiamata c’è ma poi l’intervallo 0-15 < 20 allora pompa = LOW… come posso risolvere?

ho inserito nella chiamata Allarme() l’HCRTC cosi da impostarmi per quanto tempo irrigare ma non è sicuramente il miglior modo

P.S: ho risolto non utilizzando time.alarms ma un semplice variabile che incrementa quando il secondo è diverso da quello precedente… Stasera posteró il codice per chi come me in futuro avrà questo tipo di problema.

ecco il codice:

#include <Wire.h>
#include <HCRTC.h>
#include "RTClib.h"
#define I2CDS1307Add 0x68
HCRTC HCRTC;
RTC_DS1307 RTC;
const byte pompa = 3;
unsigned int incremento = 0, cadenzaMAX, cadenza = 20, tempoAccensione = 10;
unsigned long tempoPrecedente = 0, intervallo = 1000;
void setup()
{
  pinMode(pompa, OUTPUT);
  Serial.begin(9600);
  RTC_DS1307 RTC;
  RTC.begin();
  Wire.begin();
  HCRTC.RTCWrite(I2CDS1307Add, 17, 6, 1, 8, 0, 0, 1); //impostare una data predefinita
}
void loop()
{
  unsigned long tempoAttuale = millis();
  unsigned int timeSecondo, timeSecondoPrec;
  /* if (tempoAttuale - tempoPrecedente >= intervallo)
    {
     tempoPrecedente = tempoAttuale;
     Serial.print("secondo: ");
     Serial.println(HCRTC.GetSecond());
    }
  */
  timeSecondo = HCRTC.GetSecond();
  HCRTC.RTCRead(I2CDS1307Add);
  timeSecondoPrec = HCRTC.GetSecond();
  //incremento = variabile che si incrementa ogni secondo
  //cadenza = ogni quanto tempo la pompa deve accendersi (espresso in secondi)
  //tempoAccensione = per quanto tempo la pompa sta accesa
  cadenzaMAX = cadenza + tempoAccensione;
  if (timeSecondo != timeSecondoPrec)
  {
    Serial.print("Incremento: ");
    Serial.println(incremento);
    incremento++;
    if (incremento <= cadenza )
    {
      digitalWrite(pompa, LOW);
      Serial.println("pompa spenta");
    }
    else if (incremento > cadenza)
      if (incremento < cadenzaMAX)
      {
        digitalWrite(pompa, HIGH);
        Serial.println("pompa accesa");
      }
      else if (incremento == cadenzaMAX)
        incremento = 0;
  }
}