Diferencia entre revisiones de «setTime()»

De ArduWiki
Saltar a: navegación, buscar
(Parametros)
(Vea también)
 
(No se muestran 12 ediciones intermedias del mismo usuario)
Línea 11: Línea 11:
 
;ss:Segundos transcurridos desde 1-ENE-1970
 
;ss:Segundos transcurridos desde 1-ENE-1970
 
;h:Hora (0~23)
 
;h:Hora (0~23)
;m;Minuto (0~59)
+
;m:Minuto (0~59)
 
;s:Segundo (0~59)
 
;s:Segundo (0~59)
 
;dia:Dia (1~31)
 
;dia:Dia (1~31)
Línea 18: Línea 18:
  
 
== Comentarios ==
 
== Comentarios ==
 +
* Si necesitas hacer conversiones entre fecha y '''Unix Time Stamp''' usa [https://www.unixtimestamp.com/ Epoch Converter]
 +
* El formato '''Unix Time Stamp''' es muy util para hacer operaciones entre dos fechas.
  
 
== Advertencias ==
 
== Advertencias ==
 +
Es indispensable incluir en el [[boceto]] '''#include <TimeLib.h>''' para que funcione o arrojara un error.
  
 
== Ejemplo 1 ==
 
== Ejemplo 1 ==
En este ejemplo incluimos la fecha hora 2018-7-14 10:0:0 y mostramos su avance cada 1350 milisegundos.
+
Creamos un reloj sin hardware externo y mostramos la h:m:s.milisegundos cada segundo usando un [[delay()]]. Las funciones estan vacias.
  
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
Línea 28: Línea 31:
 
void setup(){
 
void setup(){
 
   Serial.begin(9600);
 
   Serial.begin(9600);
   setTime(10,0,0,14,7,2018);  //h,min,seg,dia,mes,año
+
  //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);
 +
}
 +
</syntaxhighlight>
 +
 
 +
{{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.
 +
 
 +
<syntaxhighlight lang="c++">
 +
#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(){
 
void loop(){
Línea 39: Línea 67:
 
   delay(1350);
 
   delay(1350);
 
}
 
}
 +
</syntaxhighlight>
 +
 +
== Ejemplo 3 ==
 +
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. Debes enviar algo como T1531562400 (2018-7-14 10:00:00).
 +
 +
<syntaxhighlight lang="c++">
 +
#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
 +
      }
 +
  }
 +
}
 +
</syntaxhighlight>
 +
 +
== Ejemplo 4 ==
 +
 +
<syntaxhighlight lang="c++">
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
== Vea también ==
 
== Vea también ==
* [[Fecha y hora]]
+
<categorytree mode=all>Libreria Time</categorytree>
* [[time_t]] - TimeLib.h
 
* [[tmElements_t]] - TimeLib.h
 
* [[now()]] - TimeLib.h
 
* [[makeTime()]] - TimeLib.h
 
* [[DateTime]] - RTClib.h
 
  
 
== Referencias ==
 
== Referencias ==
 +
* [https://www.prometec.net/time-arduino/ Libreria Time] - Prometec
  
[[Category:Variables]]
+
[[Category:Libreria Time]]

Revisión actual del 00:04 6 may 2019

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 3

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. Debes enviar algo como T1531562400 (2018-7-14 10:00:00).

#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
      }
   }
}

Ejemplo 4

Vea también


Referencias