Show Posts
Pages: [1]
1  International / Español / Poner en hora el DS1307 mediante NTP en Arduino 1.0 on: January 31, 2012, 06:16:05 pm
Hola amigos.
Quiero ajustar la hora del DS1307 mediante el protocolo NTP.
Con versiones anteriores utilizaba la librería Time para ajustar el DS1307 a la hora NTP, pero ahora me da errores de compilación.
El nuevo IDE 1.0 ya trae un ejemplo de cómo leer el tiempo de un servidor NTP.
¿Saben si alguien la ha actualizado al entorno 1.0?
Gracias
2  International / Español / Re: Código horario verano/invierno on: March 31, 2011, 11:50:16 am
En el enlace que puse viene explicado, y también en la wikipedia, pero esa explicación no la entiendo
http://es.wikipedia.org/wiki/Congruencia_de_Zeller

Lo que calculamos es el último domingo de Marzo y el último domingo de Octubre (las 2 de la madrugada del sábado al domingo ya es el domingo) y si la fecha actual es posterior al último domingo de Marzo, y anterior al último domingo de octubre, entonces es horario de verano (lo almaceno poniendo la variable horariodeverano a true). Se podría afinar más haciendo el cambio a las 2 de la madrugada, pero a mí me vale si lo hace a las 12 de la noche y me simplifica el código.

La hora, la tengo en UTC y si es horario de verano, cuando voy a escribirla muestro la hora +2, pero si no es horario de verano, muestro la hora +1.
Code:
  if  (horariodeverano==true)
  {
    Serial.print(now.hour()+2, DEC);
  }
  else
  {
    Serial.print(now.hour()+1, DEC);
  }

Aquí la función calculacambiohora, que llama a la de Zeller:

Code:
void calculacambiohora () {
  DateTime now = RTC.now();
  int anno=now.year();
  //el último domingo de Marzo
  int dhv = 31 - Zeller(anno, 3, 31);
  //el último domingo de Octubre
  int dhi=31 - Zeller(anno,10,31);
  horariodeverano=false;
  if ((( now.month()>3 ) && ( now.month()<10 )) || ( ( now.month()==3 ) && (  now.day()>=dhv)) || ( ( now.month()==10 ) && (  now.day()<dhi)))
  {
    horariodeverano=true;
  }
}


int Zeller(int anno, int mes, int dia)
{
  if (mes <= 2)
  {
    mes = mes + 10;
    anno = anno - 1;
  }
  else
  {
    mes = mes - 2;
  }
  int a = anno % 100;
  int b = anno / 100;
  int resultado =
    (
  700 +
    ((26 * mes - 2) / 10) +
    dia +
    a +
    a / 4 +
    b / 4 -
    2 * b
    ) % 7;
  return resultado;
}

Lo probé el otro día, y por la mañana el arduino-reloj mostraba la hora con el cambio correcto
Saludos
3  International / Español / Re: Código horario verano/invierno on: March 27, 2011, 02:28:29 pm
Ahora que hemos cambiado de hora, he encontrado una forma bastante sencilla, empleand la "congruencia de Zeller". En este artículo lo explican:
http://latecladeescape.com/recetas-algoritmicas/ya-estamos-otra-vez-con-el-dichoso-cambio-de-hora.html
Pages: [1]