setTime()

De ArduWiki
Revisión del 22:02 27 abr 2019 de Kike GL (Discusión | contribuciones) (Ejemplo 1)

Saltar a: navegación, buscar

Descripcion

La función setTime() esta disponible luego de invocada la libreria TimeLib.h y nos permite decirle al Arduino en que día y hora estamos y que a partir de allí mantenga adecuadamente esa fecha hasta su próximo reseteo.

Sintaxsis

setTime(ss);     //Numero de segundos desde 1-ENE-1970
setTime(h,m,s,dia,mes,año);  //hora, minuto, segundo dia, mes, año.

Parámetros

ss
Segundos transcurridos desde 1-ENE-1970
h
Hora (0~23)
m
Minuto (0~59)
s
Segundo (0~59)
dia
Dia (1~31)
mes
Mes (1~12)
año
Año (1970~2069)

Comentarios

  • Si necesitas hacer conversiones entre fecha y Unix Time Stamp usa Epoch Converter
  • El formato Unix Time Stamp es muy util para hacer operaciones entre dos fechas.

Advertencias

Es indispensable incluir en el boceto #include <TimeLib.h> para que funcione o arrojara un error.

Ejemplo 1

Creamos un reloj sin hardware externo y mostramos la h:m:s.milisegundos cada segundo usando un delay(). Las funciones estan vacias.

#include <TimeLib.h>
void setup(){
   Serial.begin(9600);
   //setTime(1531562400);      //Unix Time Stamp
   setTime(10,0,0,14,7,2018);  //Formato h,m,s,d,m,a
}
void loop(){
   Serial.print(hour());
   Serial.print(":");
   Serial.print(minute());
   Serial.print(":");
   Serial.print(second());
   Serial.print(".");
   Serial.println(millis());
   delay(1000);
}

Nota: Mira la secuencia cada ves hay 1001 milisegundos mas. Es debido a que el tiempo continua corriendo.


Ejemplo 2

En este ejemplo incluimos la fecha hora 2018-7-14 10:0:0 y mostramos su avance cada 1350 milisegundos. Cada ciclo consultamos la hora y la guardamos en una variable por lo que ahora todas las funciones usan exactamente la misma hora.

#include <TimeLib.h>
void setup(){
   Serial.begin(9600);
   //setTime(1531562400);      //Unix Time Stamp
   setTime(10,0,0,14,7,2018);  //Formato h,m,s,d,m,a
}
void loop(){
   time_t t = now();
   Serial.print(hour(t));
   Serial.print(":");
   Serial.print(minute(t));
   Serial.print(":");
   Serial.println(second(t));
   delay(1350);
}

Ejemplo 2

Muestra Arduino como un reloj sin hardware externo. Se sincroniza por mensajes enviados por el puerto serie, muestra la fecha y hora cada segundo por consola y administra el LED incorporado.

#include <TimeLib.h>
#define TIME_HEADER  "T"   //Encabezado de mensaje de sincronizacion

void setup()  {
   Serial.begin(115200);
   pinMode(13, OUTPUT);
   Serial.println("Esperando sincronizacion");
}

void loop(){    
   if (Serial.available()) {
      sinc();
   }
   if (timeStatus()!= timeNotSet) {
      printFecha();  
   }
   if (timeStatus() == timeSet) {
      digitalWrite(13, HIGH);  //Esta sincronizado
   }else{
      digitalWrite(13, LOW);   //Requiere sincronizacion
   }
   delay(1000);
}

void printFecha(){
   if (day() < 10){
       Serial.print("0");
   }
   Serial.print(day());    //dia
   Serial.print("-");
   if (month() < 10){
      Serial.print("0");
   }
   Serial.print(month());  //mes
   Serial.print("-");
   Serial.print(year());   //año
   Serial.print(" ");
   if (hour() < 10){
      Serial.print("0");
   }
   Serial.print(hour());   //hora
   Serial.print(":");
   if (minute() < 10){
      Serial.print("0");
   }
   Serial.print(minute());  //minutos
   Serial.print(":");
   if (second() < 10){
      Serial.print("0");
   }
   Serial.println(second());  //segundos
}

void sinc() {
   if (Serial.find(TIME_HEADER)) {
      unsigned long pctime = Serial.parseInt();
      if (pctime >= 1357041600) {   //1-ENE-2013
         setTime(pctime);           //Sincroniza reloj Arduino
      }
   }
}

Vea también

Referencias