Problema en alarmas con reloj DS1307

Hola a todos,

Soy Juanma y estoy con un amigo en un proyecto con Arduino para poder programar el riego automático y que se dispare a la hora que nosotros queramos.

Antes de nada decir que somos muy novatos en esto de Arduino... jejeje

Estamos usando la libreria "Alarm" que trae Arduino, pero no nos acaba de funcionar como esperamos.... Os cuento nuestros problemas a ver si me podéis echar una mano.

Para crear la alarma usamos "Alarm.alarmrepeat" y funciona perfectamente incluso escribiendola varias veces, salvo cuando llega a 6, que deja de funcionar... (Entendemos que esto es porque tiene un total de 6 alarmas)

Y hemos visto que existe "Alarm.write" pero eso no nos funciona...

La alarma la cogemos de una web, y lo que queremos es poder cambiar una alarma para que se ejecute a la hora que queramos, sin necesidad de usar cada vez una alarma distinta.

Me explico bastante mal, asique pongo ejemplo:

void ResolverDatos(String cadena){          
  int posIni=cadena.indexOf('body');
  int posFin=cadena.lastIndexOf('body');
    
  S1=cadena.substring(cadena.indexOf("S1")+3,cadena.indexOf("-S1")-1);
  S2=cadena.substring(cadena.indexOf("S2")+3,cadena.indexOf("-S2")-1);
  S3=cadena.substring(cadena.indexOf("S3")+3,cadena.indexOf("-S3")-1);
  
  time=S1.substring(0, S1.indexOf(';'));
  laps=S1.substring(S1.indexOf(';')+1,S1.lastIndexOf(';'));
  rep=S1.substring(S1.lastIndexOf(';')+1);
  
  h=time.substring(0,2);
  m=time.substring(3,5);

  long alarm1Value=(ConvertStringtoLong(h)*3600)+ (ConvertStringtoLong(m)*60);
  
  time=S2.substring(0, S2.indexOf(';'));
  laps=S2.substring(S2.indexOf(';')+1,S2.lastIndexOf(';'));
  rep=S2.substring(S2.lastIndexOf(';')+1);
  
  h=time.substring(0,2);
  m=time.substring(3,5);
  
  long alarm2Value=(ConvertStringtoLong(h)*3600)+ (ConvertStringtoLong(m)*60);
  
  time=S3.substring(0, S3.indexOf(';'));
  laps=S3.substring(S3.indexOf(';')+1,S3.lastIndexOf(';'));
  rep=S3.substring(S3.lastIndexOf(';')+1);
  
  h=time.substring(0,2);
  m=time.substring(3,5);
  
  long alarm3Value=(ConvertStringtoLong(h)*3600)+ (ConvertStringtoLong(m)*60);
  
  if (Alarm.read(myAlarm) != alarm1Value) {
    myAlarm=Alarm.alarmRepeat(alarm1Value, MorningAlarm);
  }
 
  if (Alarm.read(myAlarm2) != alarm2Value) {
    myAlarm2=Alarm.alarmRepeat(alarm2Value, MorningAlarm);
  }  
  
  if (Alarm.read(myAlarm3) != alarm3Value) {
    myAlarm3=Alarm.alarmRepeat(alarm3Value, MorningAlarm);
  }

Asi es como lo tenemos ahora, pero al cambiar 6 veces la hora desde la web deja de funcionar, y lo que queremos es usar sólo 3 alarmas pero poder cambiar la hora cuantas veces queramos. Pero parece ser que el arduino cada cambio de hora la toma como una alarma nueva, y esto no nos vale...

Un saludo y muchas gracias de antemano

yo hice un riego automático con un arduino. un reloj DS1307, una pantalla LCD y 4 botones para poder programar.
No usé ninguna librería especial para activar los riegos. Para los diferentes sectores yo le puse una hora de arranque y una duración. Luego lo único que hago es comparar si:
hora actual > hora activación & hora actual < hora activación + duración riego
Esta es la condición para regar.
el único probema solucionado pero de una manera chapucera es cuando paso de las 23:59 a las 00:00 del día siguiente.

Te adjunto el programa.

Riego_LCD_Time.rar (5.03 KB)

Muchisimas gracias por la respuesta y el aporte, que nos ha venido muy bien.

Hemos dejado de utilizar la libreria esa y lo vamos a hacer a tu manera (hora actual > hora activación & hora actual < hora activación + duración riego), eso sí, añadiendo una interrupción interna.

Abriré otro post con otro problemilla que tengo respecto a las interrupciones, pero esto parece que va marchando...

Muchisimas gracias de nuevo,

Un saludo