Fallo al comparar 2 variables de hora

Buenas tardes, necesito una ayuda con mi proyecto, estoy haciendo domotica para casa, con una pantalla Nextion de 7", una de las funciones es subir y bajar persianas con la salida del sol, esto lo calculo con la libreria Dusk2Dawn y obtengo los minutos desde medianoche o lo convierto a hora. Tengo un RTC 1307 del que obtengo la hora y la junto en una variable, ambas las imprimo en el puerto serial y me salen idénticas, pero no me sigue el código que tengo dentro del if, no voy a pegar todo el código ya que actualmente tengo 1650 lineas, adjunto las partes que tienen el problema

char fecha [12];
char hora [12];
char Sunrise;
char Sunset;



void loop {
 DateTime now = RTC.now();
 sprintf(hora,"%02u:%02u ",now.hour(),now.minute());



void sigPersiana() {
  DateTime now = RTC.now();
  if (EEPROM.read(90) == 1) {
   Serial.println("persiana por sol activado")
   int Sunrise  = casa.sunrise(now.year(), now.month(), now.day(), true);
   int Sunset   = casa.sunset(now.year(), now.month(), now.day(), true);
   Sunrise = Sunrise + 30;
   Sunset = Sunset - 10;
   char hSunrise[12];
   Dusk2Dawn::min2str(hSunrise, Sunrise);
   char hSunset[12] = "00:00";
   Dusk2Dawn::min2str(hSunset, Sunset);
   Serial.println(hora);
     Serial.println(hSunrise);
       if (hora == hSunrise) {
       Serial.println("coincide hora sunset");

Gracias de antemano

Al final lo he conseguido convirtiendo la hora actual a minutos y comparando antes de la conversión, aunque me gustaría saber el motivo de que no me funcionara de la otra forma, ando un poco perdido con los string array char... si alguien sabe algún sitio donde lo expliquen decente ya que no tengo mucha idea de programar en c

Con un código parcial es dificil responderte.

Voy explicando lo que veo para ir entendiendo a ver si descubro la falla.

Lo primero que me llama la atención es que usas un entero para Sunrise al que le sumas 30 despreocupadamente? La única razón para hacer eso es que el objeto casa.sunrise(hora, min, sec) convierta todo a un entero.

Luego defines esto un array de char

char hSunset[12] = "00:00";

y claro le envias a una librería que desoncozco un array de caracteres y un entero.

Dusk2Dawn::min2str(hSunrise, Sunrise);

Supongo que la libreria convierte minutos a str como dice min2str Pero luego haces la macana o el error

 if (hora == hSunrise) {

comparas un entero con un array de caracteres lo que es un error.

Aquí esta tu problema!!

Lo de sumar 30 es por que no me interesa que se suban las persianas cuando apenas hay luz, esto ya lo ire corrigiendo cuando este en uso por meses o lo que haga falta.

Comparaba las variables por que tenían el mismo valor, como decía no tengo mucha idea de c, no estaría pidiendo ayuda.

Gracias por aclararlo.

Perdona no quiero polemizar pero antes pusiste

Buenas tardes, necesito una ayuda con mi proyecto,

Te la brindo y dices

Comparaba las variables por que tenían el mismo valor, como decía no tengo mucha idea de c, no estaría pidiendo ayuda

No tienen el mismo valor. lucen y se imprimen aparentemente igual pero no son lo mismo. Una cosa es un entero que va de 0 a 32768 como pasa con Sunrise o Sunset y otra es un array o vector de caracteres como char hSunrise[12] = "00:00";

Es como comparar tocino con velocidad como decía mi profesor de Lengua.

supongamos que tienes las "12:23" eso son 5 caracteres ubicados en las posiciones 0,1,2,3,4 tal que hSunrise[0] = "1" hSunrise[1] = "2" hSunrise[2] = ":" hSunrise[3] = "2" hSunrise[4] = "3"

Y por otro lado luego de la conversión a entero 12:23 se convierte en

12*60+23= 743 como conversión completa pero de todos modos

entonces tu comparas

if (hora == hSunrise) {

y por supuesto que no es correcto