Pages: [1]   Go Down
Author Topic: Problema en alarmas con reloj DS1307  (Read 1237 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

Code:

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
« Last Edit: November 26, 2012, 10:47:09 am by juanma15 » Logged

0
Offline Offline
Full Member
***
Karma: 2
Posts: 105
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 - downloaded 23 times.)
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


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
Logged

Pages: [1]   Go Up
Jump to: