problema con temporizadores

Buenas compañeros despues de progamar dos temporizadores uno para aplicarle (horas minutos y tiempo de ambos ) y otros temporizadores que se activan en el minuto de cada hora durante X tiempo … me encuentro que dichos temporizadores no se ejecutan …¿podriais echarle un vistazo y ver de donde viene el fallo?

/*Pineado de TFT 1.8 al MEGA and ATmega2560 based boards
   sclk 52  // (AMARILLO)  Don't change, this is the hardware SPI SCLK line( 
   mosi 51  //( VERDE )  Don't change, this is the hardware SPI MOSI line
   cs   47  // ( NARANJA) TFT chip select line
   dc   48  //(GRIS) TFT data/command line
   rst  44  //(BLANCO) you could alternatively connect this to the Arduino reset*/
struct tHora {
  int hora;
  int minutos;
};

struct tTemporizadores {
  tHora hora_inicial; //hora de inicio del ciclo
  tHora hora_final;   //hora de final del ciclo
  int pin;           //pin a utilizar. VALONR NEGATIVO para inutilizar y que no se tenga en cuenta
  byte digital;       //0 el pin es analogico, 1 es digital
  byte valorON;         //valor que saca por el pin cuando esta en el estado ON. Si es analogico, es el valor (0-255) del pwm. Si es digital, es 0 o 1;
  byte valorOFF;        //idem para cuando esta en el estado OFF
};
struct tTemporizadores24h {
  int minutos_inicio;     ///MINUTO DE CADA HORA 
  int minutos_duracion;   // TIEMPO DE DURACION
  int pin;                //pin a utilizar. VALONR NEGATIVO para inutilizar y que no se tenga en cuenta
  int digital;           //0 el pin es analogico, 1 es digital
  byte valorON;         //valor que saca por el pin cuando esta en el estado ON. Si es analogico, es el valor (0-255) del pwm. Si es digital, es 0 o 1;
  byte valorOFF;        //idem para cuando esta en el estado OFF
};
#include <TFT_ST7735.h> // Hardware-specific library
#include <SPI.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h> 
#define DS1307_I2C_ADDRESS 0x68
TFT_ST7735 tft = TFT_ST7735();    
float p = 3.1415926;
#define ONE_WIRE_BUS 24
#define PinVentilador 27//REFRIGERACION LUCES
#define PinNiebla 29 //HUMIDIFICADOR
#define PinExtractor 26 //EXTRACTOR DE AIRE
#define PinRiego 28//BOMBA RIEGO
#define PinApoyo 30//AIRE APOYO
byte error=0;
int EstadoVentil=0;
int EstadoRiego =0;
int EstadoApoyo =0;
int EstadoNiebla=0;
int EstadoExtrac=0;
int Retraso=2000;
byte escribe_pantalla =0;
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
byte tft_pant=0;           // Pantalla que se mostrará 
byte lampara[4][12] ={{2,0,0,0,0,0,0,0,0,0,0,0}, 
                      {2,0,0,0,0,0,0,0,0,0,0,0},  
                      {2,0,0,0,0,0,0,0,0,0,0,0},
                      {2,0,0,0,0,0,0,0,0,0,0,0}}; 
                
float temperatura[2]; 
unsigned long tiempo_inicial;
OneWire oneWire(ONE_WIRE_BUS);//temperatura
DallasTemperature sensores(&oneWire);
tTemporizadores temporizadores[4];
tTemporizadores24h temporizadores24h[2];


int TemporizadorEnIntervalo (int h, int m, tTemporizadores24h t){
  int encontrado = 0;
  int salir = 0;
  tHora hora_inicial;
  tHora hora_final;

  hora_inicial.hora=h;
  hora_inicial.minutos=t.minutos_inicio;
  hora_final = Suma_Horas(hora_inicial,0,t.minutos_duracion);

  int i = hora_inicial.hora % 24;
  int resultado = 0;
  
  do{
    if (i==h) encontrado = 1;
    if (i==hora_final.hora) salir = 1;
    i = (i+1) % 24;
  } while ((salir==0) && (encontrado==0));
  
  if (encontrado){
    resultado = 1;
    
    if (h == hora_inicial.hora){
      if (m<hora_inicial.minutos) resultado = 0;
    }
    
    if (h == hora_final.hora){
      if (m>=hora_final.minutos) resultado = 0;
    }
  }
  return resultado;
}

//-----------------------------------------------------------------------------------------

int TemporizadorEnIntervalo (int h, int m, tTemporizadores t){
  int encontrado = 0;
  int salir = 0;
  int i = t.hora_inicial.hora % 24;
  int resultado = 0;
  
  do{
    if (i==h) encontrado = 1;
    if (i==t.hora_final.hora) salir = 1;
    i = (i+1) % 24;
  } while ((salir==0) && (encontrado==0));
  
  if (encontrado){
    resultado = 1;
    
    if (h == t.hora_inicial.hora){
      if (m<t.hora_inicial.minutos) resultado = 0;
    }
    
    if (h == t.hora_final.hora){
      if (m>=t.hora_final.minutos) resultado = 0;
    }
  }
  return resultado;
}



//-----------------------------------------------------------------------------------------
void setup()
{
  //programamos los temporizadores
  temporizadores[0].hora_inicial.hora=16;
  temporizadores[0].hora_inicial.minutos=12;
  temporizadores[0].hora_final.hora=16;
  temporizadores[0].hora_final.minutos=14;
  temporizadores[0].pin=27;
  temporizadores[0].digital=1;
  temporizadores[0].valorON=1;
  temporizadores[0].valorOFF=0;

  temporizadores[1].hora_inicial.hora=16;
  temporizadores[1].hora_inicial.minutos=05;
  temporizadores[1].hora_final.hora=16;
  temporizadores[1].hora_final.minutos=2;
  temporizadores[1].pin=-32;
  temporizadores[1].digital=1;
  temporizadores[0].valorON=1;
  temporizadores[0].valorOFF=0;

  temporizadores[2].hora_inicial.hora=22;
  temporizadores[2].hora_inicial.minutos=0;
  temporizadores[2].hora_final.hora=22;
  temporizadores[2].hora_final.minutos=2;
  temporizadores[2].pin=-32;
  temporizadores[2].digital=1;
  temporizadores[0].valorON=1;
  temporizadores[0].valorOFF=0;

  temporizadores[3].hora_inicial.hora=4;
  temporizadores[3].hora_inicial.minutos=0;
  temporizadores[3].hora_final.hora=4;
  temporizadores[3].hora_final.minutos=2;
  temporizadores[3].pin=-32;
  temporizadores[3].digital=1;
  temporizadores[0].valorON=1;
  temporizadores[0].valorOFF=0;


  //TEMPORIZADORES 24h
  temporizadores24h[0].minutos_inicio=10;
  temporizadores24h[0].minutos_duracion=1;
  temporizadores24h[0].pin=-27;
  temporizadores24h[0].digital=1;
  temporizadores24h[0].valorON=1;
  temporizadores24h[0].valorOFF=0;

  temporizadores24h[0].minutos_inicio=10;
  temporizadores24h[0].minutos_duracion=2;
  temporizadores24h[0].pin=30;
  temporizadores24h[0].digital=0;
  temporizadores24h[0].valorON=1;
  temporizadores24h[0].valorOFF=0;
void loop (){

      getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
      sensores.requestTemperatures();
      Temperatura();
      Luces();
      Temporizadores();
      Temporizadores24h();
     
   }

///////////////////////////////////////////////////////
//  Comprobación de temporizadores             //////
////////////////////////////////////////////////////////
void Temporizadores() 
{
    int i;
    for (i=0;i++;i<8){
        if (temporizadores[i].pin>0){
          if (TemporizadorEnIntervalo(hour,minute,temporizadores[i])){
            if (temporizadores[i].digital==1){
              if (temporizadores[i].valorON==0)
                digitalWrite(temporizadores[i].pin, LOW);
                
                else  
                digitalWrite(temporizadores[i].pin, HIGH);
               
            }
            else
            {
              analogWrite(temporizadores[i].pin,temporizadores[i].valorON);
            }
          }
          else
          {
            if (temporizadores[i].digital==1){
              if (temporizadores[i].valorOFF==0)
                digitalWrite(temporizadores[i].pin, LOW);
                
                else 
                digitalWrite(temporizadores[i].pin, HIGH);
                
            }
            else
            {
              analogWrite(temporizadores[i].pin,temporizadores[i].valorOFF);
            }
            
          }
        }
    }
}


///////////////////////////////////////////////////////
//  Comprobación de temporizadores 24h            //////
////////////////////////////////////////////////////////
void Temporizadores24h() 
{
    int i;
    for (i=0;i++;i<2){
        if (temporizadores24h[i].pin>0){
          if (TemporizadorEnIntervalo(hour,minute,temporizadores24h[i])){
            if (temporizadores24h[i].digital==1){
              if (temporizadores24h[i].valorON==0)
                digitalWrite(temporizadores24h[i].pin, LOW);
                else
                digitalWrite(temporizadores24h[i].pin, HIGH);
            }
            else
            {
              analogWrite(temporizadores24h[i].pin,temporizadores24h[i].valorON);
            }
          }
          else
          {
            if (temporizadores24h[i].digital==1){
              if (temporizadores24h[i].valorOFF==0)
                digitalWrite(temporizadores24h[i].pin, LOW);
                else
                digitalWrite(temporizadores24h[i].pin, HIGH);
            }
            else
            {
              analogWrite(temporizadores24h[i].pin,temporizadores24h[i].valorOFF);
            }
            
          }
        }
    }
}

Y porque no usas TimeAlarm.h y Time.h para hacer lo mismo.

surbyte:
Y porque no usas TimeAlarm.h y Time.h para hacer lo mismo.

Gracias por la respuesta .... la verdad es que no la he utilizado nunca y se me escapa la progamacion de esta a mi codigo

TimeAlarm te permite crear alarmas de tiempo on y tiempo OFF diarias, o semanales.
Yo creo que se ajusta perfecto.
Prueba el ejemplo básico que tiene como 6 alarmas para sentirte cómodo y ver como lo puedes adecuar a tu proyecto.

#include <Time.h>
#include <TimeAlarms.h>
#define PinNiebla 29 //HUMIDIFICADOR
#define PinExtractor 26 //EXTRACTOR DE AIRE
#define PinRiego 28//BOMBA RIEGO
#define PinApoyo 30//AIRE APOYO
void setup()
{
  pinMode(PinNiebla,OUTPUT);
  pinMode(PinExtractor,OUTPUT);
  pinMode(PinRiego,OUTPUT);
  pinMode(PinApoyo,OUTPUT);
  Serial.begin(9600);
  Alarm.alarmRepeat(24,00,0,Encendido); 
  Alarm.alarmRepeat(24,01,0, Apagado);  
  Alarm.alarmRepeat(23,00,0,Encendido); 
  Alarm.alarmRepeat(23,01,0, Apagado); 
  Alarm.alarmRepeat(22,00,0,Encendido); 
  Alarm.alarmRepeat(22,01,0, Apagado); 
  Alarm.alarmRepeat(21,00,0,Encendido); 
  Alarm.alarmRepeat(21,01,0, Apagado);  
  Alarm.alarmRepeat(20,00,0,Encendido); 
  Alarm.alarmRepeat(20,01,0, Apagado); 
  Alarm.alarmRepeat(19,00,0,Encendido); 
  Alarm.alarmRepeat(19,01,0, Apagado); 
}

void  loop(){  
  digitalClockDisplay();
  Alarm.delay(1000); // wait one second between clock display
}

// functions to be called when an alarm triggers:
void Encendido(){
 digitalWrite(PinExtractor, HIGH);    
}

void Apagado(){
 digitalWrite(PinExtractor, LOW);           
}


void digitalClockDisplay()
{
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println(); 
}

void printDigits(int digits)
{
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

he escho este frag pero tener que hacer repetir por cada hora las 24 horas y por cada pin …

Veo que no leiste la documentación.
Tiene la posibilidad de accionar una alarma cada hora todo el dia usando timers

Alarm.timerRepeat(seconds, function);
Create a timer that will call a function every at an interval of "seconds".
Alarm.timerOnce(seconds, function);
Create a timer that will call a function once in "seconds".

Bien, entonces solo tienes que crear un evento que inicie todo. y luego accionar un timer que se accione cada 60 min.
Dime si quieres que todo se repita cada hora x 1 minuto pero no te guardes nada porque no veo lo mismo en tu código inicial.

surbyte:
Veo que no leiste la documentación.
Tiene la posibilidad de accionar una alarma cada hora todo el dia usando timers

Bien, entonces solo tienes que crear un evento que inicie todo. y luego accionar un timer que se accione cada 60 min.
Dime si quieres que todo se repita cada hora x 1 minuto pero no te guardes nada porque no veo lo mismo en tu código inicial.

Esa es mi pretencion Surbyte activar los reles( distintos horarios ) por un minuto cada hora todo el dia. del primer codigo no voy a implantar nada voy a conectar un arduino extra para la funciones de los temporizadores

#include <Time.h>
#include <TimeAlarms.h>
#define PinNiebla 29 //HUMIDIFICADOR
#define PinExtractor 26 //EXTRACTOR DE AIRE
#define PinRiego 28//BOMBA RIEGO
#define PinApoyo 30//AIRE APOYO
void setup()
{
  pinMode(PinNiebla,OUTPUT);
  pinMode(PinExtractor,OUTPUT);
  pinMode(PinRiego,OUTPUT);
  pinMode(PinApoyo,OUTPUT);
  Serial.begin(9600);
  setTime(24,00,0,2,24,17); 
  // create the alarms 
 Alarm.alarmRepeat(24,00,0,Encendido); 
  Alarm.alarmRepeat(24,01,0, Apagado);  
  Alarm.alarmRepeat(24,02,0,Encendido1); 
  Alarm.alarmRepeat(24,03,0, Apagado1); 
  Alarm.alarmRepeat(24,04,0,Encendido2); 
  Alarm.alarmRepeat(24,05,0, Apagado2); 
 
  Alarm.timerRepeat(60, Repeats);            // timer for every 60 seconds    
  Alarm.timerOnce(10, OnceOnly);             // esta funcion no la entiendo 
}

void  loop(){  

      Encendido();
      Apagado();
      Encendido1();
      Apagado1();
      Encendido2();
      Apagado2();
     digitalClockDisplay();
  Alarm.delay(1000); 
}
// functions to be called when an alarm triggers:
void Encendido(){
 digitalWrite(PinExtractor, HIGH);    
}
void Apagado(){
 digitalWrite(PinExtractor, LOW);           
}
void Encendido1(){
 digitalWrite(PinNiebla, HIGH); 
 digitalWrite(PinApoyo , HIGH); 
}

void Apagado1(){
  digitalWrite(PinNiebla, LOW); 
 digitalWrite(PinApoyo , LOW);          
}
void Encendido2(){
 digitalWrite(PinRiego, HIGH);    
}

void Apagado2(){
 digitalWrite(PinRiego, LOW);           
}
    
void Repeats(){
  Serial.println("60 second timer");         
}

void OnceOnly(){
  Serial.println("This timer only triggers once");  
}

void digitalClockDisplay()
{
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println(); 
}

void printDigits(int digits)
{
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

ok, el tema será iniciar la secuencia y luego no debes preocuparte.
Dejame verlo y luego te posteo un código a ver si funciona.

@medina

Hay una librería que hace muy bien la función que deseas. Leete este enlace y el deposito de la misma la encuentras aqui.

La he usado y aparte de simple realiza su cometido. Por probarla no pierdes nada.

lightcalamar:
@medina

Hay una librería que hace muy bien la función que deseas. Leete este enlace y el deposito de la misma la encuentras aqui.

La he usado y aparte de simple realiza su cometido. Por probarla no pierdes nada.

gracias compañero

surbyte:
ok, el tema será iniciar la secuencia y luego no debes preocuparte.
Dejame verlo y luego te posteo un código a ver si funciona.

logro que arranque ( led) cuando llega la funcion de encendido pero solo un parpadeo ( tiempo asignado),ademas veo el led constantemente cada vez que el serial marca un segundo como una debil señal por el pin