Mantener un pin HIGH solo una vez a una hora en concreto.

Estoy aprendiendo a programar un arduino MEGA, el caso es que quiero que, a una hora determinada un pin este HIGH durante un tiempo y luego vuelva a LOW.

El condicional que uso es, que si es la misma hora y minuto, este HIGH, pero claro, cuendo continua el bucle y vuelve a esa linea, la hora y minuto sigue coincidiendo y vuelve a hacer lo mismo. Cuando lo que quiero es que ya no lo haga hasta el dia siguiente.
Como lo hago?

////////////////////////////////////////////////////////////
//
//   COMEDERO
//
//////////////////////////////////////////////////
void comedero()
   {
       if  (Reloj.GetHour() ==  (CFG.COMIDA_H) && (Reloj.GetMinute() == (CFG.COMIDA_M ))); 
           {
             SetRele( 4, PIN_D_COMIDA, HIGH );
             delay(3000);
           }
   }

Lo que quieres es que se produzca una acción (pin a HIGH, tiempo predeterminado, pin a LOW) cuando se produce un evento (la hora prefijada). Pero no quieres que se produzca mientras se cumple la condición si no sólo en el instante en el que se cumple. Pues esto es lo que se denomina ejecutar una acción en un flanco ascendente. Para ello crea una variable que en este caso valdrá 0 ó 1. También se puede establecer tipo boolean con true o false, es lo mismo. Esta variable suele llamarse una bandera.

Partimos de que la bandera está a cero.
Si se produce tu evento (coincidencia de la hora) y la bandera es cero entonces ejecutas la acción (activar el PIN el tiempo que quieras) y pones la bandera a 1.
Si la bandera está a 1 y termina tu evento (no coincide la hora) entonces pones la bandera a 0.

La explicación es casi el código que tienes que hacer narrado. A ver si te sale, si no pones lo que avances y te lo depuro.

Si colocas delay(60000); en vez de 3000 sólo se activará 1 vez, o si pones Reloj.GetSecond( como parte de la condición

Hola,
Si cierras con punto y coma la sentencia if(), la estás anulando.

Si después del delay ya no coinciden los minutos, solo tienes que controlar la hora
Yo probaría algo así:

int hancomido = 0;

void comedero()
   {
       if  (Reloj.GetHour() ==  CFG.COMIDA_H && Reloj.GetMinute() == CFG.COMIDA_M  && hancomido == 0)
       {
             SetRele( 4, PIN_D_COMIDA, HIGH );
             delay(3000);
             hancomido = 1;
       }
       else 
            hancomido = 0;
   }

curro92:
Hola,
Si cierras con punto y coma la sentencia if(), la estás anulando.

Si después del delay ya no coinciden los minutos, solo tienes que controlar la hora
Yo probaría algo así:

int hancomido = 0;

void comedero()
  {
      if  (Reloj.GetHour() ==  CFG.COMIDA_H && Reloj.GetMinute() == CFG.COMIDA_M  && hancomido == 0)
      {
            SetRele( 4, PIN_D_COMIDA, HIGH );
            delay(3000);
            hancomido = 1;
      }
      else
           hancomido = 0;
  }

Gracias, pero creo que hay un error. Ya que siempre que sea la hora estara dando de comer, un bucle si, otro no, y asi.

Creo que habira que hcaer como dijo Cheyenne:

boolean hancomido = false;

////////////////////////////////////////////////////////////
//
//   COMEDERO
//
//////////////////////////////////////////////////
void comedero()
   {
       if  (Reloj.GetHour() ==  (CFG.COMIDA_H) && (Reloj.GetMinute() == (CFG.COMIDA_M )) && !=hancomido ); 
           {
             SetRele( 4, PIN_D_COMIDA, HIGH );
             delay(3000);
             SetRele( 4, PIN_D_COMIDA, LOW );
             hancomido = true;
           }
      if  Reloj.GetHour() !=  (CFG.COMIDA_H) && (Reloj.GetMinute() != (CFG.COMIDA_M )) hancomido= false;

   }