Encender Led con RTC y HC-SR04

Estoy intentando hacer una "alarma" que funcione de 6 de la tarde a 7 de la mañan y que consiste en que cuando una persona pase por en frente de un sensor de ultrasonido lo detecte y encienda un led y si fuera posible que se mantubiera encendido(aunque eso lo puedo ver despues yo) tengo este codigo pero el led no enciende por la hora incluso si utilizo solamente la hora y no el sensor de ultrasonido como metodo de encendido el rtc dice que son las 18 o mas pero el led no enciende espero que me puedan ayudar

Aqui esta el codigo ,Gracias de antemano

#include <Wire.h>
#include <RTClib.h>
#define led 2
int estado = 0;
int TRIG = 10;      // trigger en pin 10
int ECO = 9;      // echo en pin 9
int DURACION;
int DISTANCIA;
bool evento_inicio = true;
bool evento_fin = true;
RTC_DS3231 rtc;

void setup()
{
  Serial.begin(9600);
  pinMode(led, OUTPUT);
  pinMode(TRIG, OUTPUT);   // trigger como salida
  pinMode(ECO, INPUT);
  if (! rtc.begin()) {
    Serial.println("Modulo RTC no encontrado !");
    while (1);
 
  }
}

void loop()
{
 digitalWrite(TRIG, HIGH);    // generacion del pulso a enviar
  delay(1);       // al pin conectado al trigger
  digitalWrite(TRIG, LOW);    // del sensor
  
  DURACION = pulseIn(ECO, HIGH);  // con funcion pulseIn se espera un pulso
            // alto en Echo
  DISTANCIA = DURACION / 58.2;    // distancia medida en centimetros
  // envio de valor de distancia por monitor serial
  delay(200);   




  
  
    DateTime fecha = rtc.now();
    if ( fecha.hour() == 18 && fecha.minute() == 00 ) { // si hora = 18 y minutos = 00
      //if(){
      if ( evento_inicio == true ) { 
        if(DISTANCIA <= 70 && DISTANCIA >= 0 ){
        digitalWrite(led, HIGH);       // activa modulo de rele con nivel alto
        Serial.println( "led encendido" );   // muestra texto en monitor serie
        evento_inicio = false;  
      }
     // carga valor falso en variable de control
      }
      // }
    }

    if ( fecha.hour() == 7 && fecha.minute() == 00 ) { // si hora = 7 y minutos = 00
      if ( evento_fin == true ) {       // si evento_fin es verdadero
        digitalWrite(led, LOW);        // desactiva modulo de rele con nivel bajo
        Serial.println( "led apagado" );     // muestra texto en monitor serie
        evento_fin = false;       // carga valor falso en variable de control
      }             // para evitar ingresar mas de una vez
    }
 Serial.print(DISTANCIA);
  Serial.print("\n");
 Serial.print(fecha.hour());        // funcion que obtiene la hora de la fecha completa
 Serial.print(":");         // caracter dos puntos como separador
 Serial.print(fecha.minute());        // funcion que obtiene los minutos de la fecha completa
 Serial.print(":");         // caracter dos puntos como separador
 Serial.println(fecha.second());

    delay(1000);           // demora de 1 segundo

    if ( fecha.hour() == 2 && fecha.minute() == 0 ) { // si hora = 2 y minutos = 0 restablece valores de
      evento_inicio = true;       // variables de control en verdadero
      evento_fin = true;
    }
}

Hola,

bool evento_inicio = true;  // yo le sacaria estas booleanas
bool evento_fin = true;

// no se me parece que complican las cosas.
// y en los condicionales de hora haria algo asi:

if (fecha.hour() < 7) n=1;   //creo una variable y le doy el valor de 1 si son menos de las 7

if ( fecha.hour() >17 or n ==1)   //aqui va a entrar si son mas de las 17 (o sea ni bien se hacen las 18) o bien si son menos de las 7 (o sea hasta las 6:59:59) 

// luego no te debes olvidar de poner n=0; creando un condicional que diga entre las 7 y las 18 n=0;

Bueno, no se si sera eso habria que probar, pero a ojo me saltan esas sugerencias. Saludos.

Ok lo probare ,gracias

hypernovat:
Bueno, no se si sera eso habria que probar, pero a ojo me saltan esas sugerencias. Saludos.

Me resulto aunque no exactamente como me dijiste pero me sirvio de guia muchisimas gracias

Coloca por favor como te resultó asi puedo cerrar el hilo si asi te parece.