Lo que ocurre es que compara hora y minuto si enciende a las 18:30 se cierra a las 19:30 por que el minuto de cerrarse es 30 y le da igual si la hora que tendría que cerrar son las 20:30....
Lo he intentado de 2 formas y ocurre lo mismo
#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 RTC; // Crea el objeto RTC
int Luzdia = 52; //Rele, Luzdia.
int Lluvia = 23;
void setup ()
{
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
Wire.begin(); // Establece la velocidad de datos del bus I2C
RTC.begin(); // Establece la velocidad de datos del RTC
///RTC.adjust(DateTime(DATE, TIME)); // Establece la fecha y hora
pinMode(Luzdia,OUTPUT);
digitalWrite (Luzdia, HIGH);
pinMode(Lluvia,OUTPUT);
digitalWrite (Lluvia, HIGH);
}
void loop ()
{
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(1000); // La información se actualiza cada 1 seg.
////Luz dia
if (now.hour() == 18 && now.minute() == 7 )
{
digitalWrite (Luzdia,LOW);
}
else
if(now.hour() == 21 && now.minute() == 7 )
digitalWrite (Luzdia, HIGH);
delay(1000);
//Lluvia
if(now.hour() >= 18 && now.minute() >= 30 && now.hour() <= 20 && now.minute() <= 30)
{
digitalWrite (Lluvia,LOW);
}
else
digitalWrite (Lluvia, HIGH);
delay(1000);
}