Diferencia entre revisiones de «Time»

De ArduWiki
Saltar a: navegación, buscar
(time_t)
(Referencias externas)
 
(No se muestran 12 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
 
== Descripción ==
 
== Descripción ==
 +
La librería [https://github.com/PaulStoffregen/Time TimeLib.h] de Paul Stoffregen...
  
 
== Placas aplicables ==
 
== Placas aplicables ==
 +
Todas.
  
 
== time_t ==
 
== time_t ==
'''time_t''' es un tipo [[unsigned long]] de 4 byte (32 bits) usado para almacenar los segundos transcurridos desde el 1-ENE-1970 o también llamada [https://www.unixtimestamp.com Unix Time Stamp].
+
[[time_t]] es un tipo [[unsigned long]] de 4 byte (32 bits) usado para almacenar los segundos transcurridos desde el 1-ENE-1970 o también llamada [https://www.unixtimestamp.com Unix Time Stamp].
  
 
=== Sintaxis ===
 
=== Sintaxis ===
Línea 15: Línea 17:
 
;valor: Numero del tipo TimeStamp de UNIX. Numero tipo [[unsigned long]].
 
;valor: Numero del tipo TimeStamp de UNIX. Numero tipo [[unsigned long]].
  
== Métodos ==
+
=== Funciones ===
 +
{|class="wikitable"
 +
|+Funciones disponibles para time_t
 +
|-
 +
!Función!!Descripción!!Ejemplo
 +
|-
 +
|[[now()]]||Almacena la hora actual en tiempo UNIX||time_t t = now();
 +
|-
 +
|year()||Muestra el año||year();
 +
|-
 +
|month()||Muestra el mes (1~12)||month();
 +
|-
 +
|monthStr()||Nombre del mes (January, February, March, April, May, June, July...)||monthStr(month());
 +
|-
 +
|monthShortStr()||Nombre corto del mes (Jan, Feb, Mar, Dic) ||monthShortStr(month());
 +
|-
 +
|day()||Muetsra el dia (1~31)||day();
 +
|-
 +
|weekday()||Muestra dia de la semana (1=domingo) (1~7)||weekday();
 +
|-
 +
|dayStr()||Nombre del dia (Sunday, Monday, Tuesday, Wenesday, Thursday, Friday, Saturday)||dayStr(weekday());
 +
|-
 +
|dayShortStr()||Nombre corto del dia (Sun, Mon, Tue, Wen, Thu, Fri, Sat)||dayShortStr(weekday());
 +
|-
 +
|hour()||Muestra las horas (0~23)||hour();
 +
|-
 +
|minute()||Muestra los minutos (0~59)||minute();
 +
|-
 +
|second()||Muestra los segundos (0~59)||second();
 +
|-
 +
|[[millis()]]||Muestra los milisegundos (0~999)||millis();
 +
|-
 +
|hourFormat12()||Formatea a 12 horas||
 +
|-
 +
|isAM()||Devuelve verdadero por la mañana||isAM()
 +
|-
 +
|isPM()||Devuelve verdadero por la tarde||isPM();
 +
|-
 +
|[[setTime()]]||Establece fecha-hora. Puede ser en segundos o hr,min,sec,dia,mes,año.||setTime(0,0,0,14,7,2018);
 +
|-
 +
|[[adjustTime()]]||Ajusta la fecha-hora del sistema agregando un valor||adjustTime(3600);
 +
|-
 +
|[[setSyncProvider()]]||Establecer proveedor de hora externa||
 +
|-
 +
|[[setSyncInterval()]]||Establecer el número de segundos entre re-sincronizaciones||
 +
|-
 +
|[[makeTime()]]||Convierte variable tipo '''tmElement_t''' en variable tipo '''time_t'''||makeTime(tm);
 +
|-
 +
|[[breakTime()]]||Convierte variable tipo '''time_t''' en variable tipo '''tmElement_t'''||makeTime(tm);
 +
|-
 +
|[[timeStatus()]]||Indica si el tiempo se sincronizado recientemente. Devuelve: timeNotSet/timeNeedSync/timeSet||
 +
|}
 +
 
 +
== tmElements_t ==
 +
[[tmElements_t]] es una matriz de seis (6) elementos que proporciona la libreria '''TimeLib.h''' y que permite manipular de manera fácil (sin tener que usar el Tiempo Unix) todos los elementos necesarios para definir una fecha-hora.
 +
 
 +
=== Sintaxis ===
 +
<pre>
 +
tmElements_t variable;
 +
</pre>
 +
 
 +
=== Parámetros ===
 +
;variable:Nombre de la variable que definiras.
 +
 
 +
=== Métodos ===
 +
{| class="wikitable"
 +
|+Metodos disponibles para tmElementos_t
 +
|-
 +
! Metodo !! Descripcion
 +
|-
 +
| .Second || Segundo (0~59)
 +
|-
 +
| .Minute || Minuto (0~59)
 +
|-
 +
| .Hour || Hora (0~23)
 +
|-
 +
| .Day || Dia (1~31)
 +
|-
 +
| .Month || Mes (1~12)
 +
|-
 +
| .Year || Año (0~99) resta de 1970.
 +
|-
 +
|[[makeTime()]]||Convierte variable tipo [[tmElements_t]] en variable tipo [[time_t]].
 +
|-
 +
|[[breakTime()]]||Convierte variable tipo [[time_t]] en variable tipo [[tmElements_t]].
 +
 
 +
|}
 +
 
 +
{{Nota|Para representar el año 2019 debes poner 49 (2019-1970) y no olvidar sumar 1920 nuevamente al resultado.}}
  
 
== Comentarios ==
 
== Comentarios ==
Línea 21: Línea 111:
 
== Advertencias ==
 
== Advertencias ==
  
== Ejemplo ==
+
== Ejemplo 1 ==
 +
En este ejemplo incluimos la fecha hora 2018-7-14 10:0:0 y mostramos su avance cada 1350 milisegundos.
 +
 
 +
<syntaxhighlight lang="c++">
 +
#include <TimeLib.h>
 +
void setup(){
 +
  Serial.begin(9600);
 +
  setTime(10,0,0,14,7,2018);  //h,min,seg,dia,mes,año
 +
}
 +
void loop(){
 +
  time_t t=now();
 +
  Serial.print(hour(t));
 +
  Serial.print(":");
 +
  Serial.print(minute(t));
 +
  Serial.print(":");
 +
  Serial.println(second(t));
 +
  delay(1350);
 +
}
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 2 ==
 +
En este ejemplo podemos enviar la fecha-hora por consola serie. Para convertir Unix Time te recomiendo usar esto. Ejemplo: T1552204800 = 2019-MAR-10 8:00:00
 +
 
 +
<syntaxhighlight lang="c++">
 +
#include <TimeLib.h>
 +
#define TIME_HEADER  "T"  //Encabezado de mensaje de sincronizacion
 +
 
 +
void setup()  {
 +
  Serial.begin(9600);
 +
  while (!Serial);        //Solo se requiere para Leonardo
 +
  pinMode(13, OUTPUT);
 +
  Serial.println("Esperando mensaje de sincronizacion");
 +
}
 +
 
 +
void loop(){   
 +
  if (Serial.available()) {
 +
      sincro();
 +
  }
 +
  if (timeStatus() == timeSet) {
 +
      pantalla();                  //Muestra fecha hora
 +
      digitalWrite(13, HIGH);      //Sincronizado
 +
  }else{
 +
      digitalWrite(13, LOW);      //Requiere sincronizar
 +
  }
 +
  delay(1000);
 +
}
 +
 
 +
void sincro() {
 +
  if (Serial.find(TIME_HEADER)) {
 +
      unsigned long pctime = Serial.parseInt();
 +
      if (pctime >= 1357041600) {      //Verifica valides de fecha-hora (mayor a 1-ENE-2013)
 +
        setTime(pctime);              //Sincroniza reloj Arduino con fecha-hora recivida por puerto serie
 +
      }
 +
  }
 +
}
 +
 
 +
void pantalla(){
 +
  Serial.print(year());
 +
  Serial.print('-');
 +
  Serial.print(month());
 +
  Serial.print('-');
 +
  Serial.print(day());
 +
  Serial.print(' ');
 +
  Serial.print(hour());
 +
  printDigito(minute());
 +
  printDigito(second());
 +
  Serial.println();
 +
}
 +
 
 +
void printDigito(int dig){
 +
  Serial.print(':');
 +
  if (dig < 10){
 +
      Serial.print('0');
 +
  }
 +
  Serial.print(dig);
 +
}
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 3 ==
 +
Con este ejemplo Arduino espera que se envíe desde el monitor un tiempo UNIX del formato T1531526400 (2018-7-14 0:0:0).
 +
 
 +
<syntaxhighlight lang="c++">
 +
#include <TimeLib.h>
 +
 
 +
void setup(){
 +
  Serial.begin(9600);
 +
  pinMode(13, OUTPUT);
 +
  Serial.println("Esperando tiempo UNIX por puerto serie");
 +
}
 +
 
 +
void loop(){   
 +
  if (Serial.available()) {
 +
      sincroniza();
 +
  }
 +
  if (timeStatus()!= timeNotSet) {
 +
      reloj(); 
 +
  }
 +
  if (timeStatus() == timeSet) {
 +
      digitalWrite(13, HIGH); //Sincronizado
 +
  }else{
 +
      digitalWrite(13, LOW);  //Falta sincronizar
 +
  }
 +
  delay(1000);
 +
}
 +
 
 +
void reloj(){
 +
  Serial.print(year());
 +
  Serial.print("-");
 +
  if (month()<10){
 +
      Serial.print('0');
 +
  }
 +
  Serial.print(month());
 +
  Serial.print("-");
 +
  if (day()<10){
 +
      Serial.print('0');
 +
  }
 +
  Serial.print(day());
 +
  Serial.print(" ");
 +
  if (hour()<10){
 +
      Serial.print('0');
 +
  }
 +
  Serial.print(hour());
 +
  Serial.print(":");
 +
  if (minute() < 10){
 +
      Serial.print('0');
 +
  }
 +
  Serial.print(minute());
 +
  Serial.print(":");
 +
  if (second() < 10){
 +
      Serial.print('0');
 +
  }
 +
  Serial.println(second());
 +
}
 +
 
 +
void sincroniza() {
 +
  const unsigned long DEFAULT_TIME = 1514764800; //1-ENE-2018
 +
 
 +
  if (Serial.find("T")) {
 +
      unsigned long pc = Serial.parseInt();
 +
      //Controla valides mayor a 1-ENE-2018
 +
      if (pc >= DEFAULT_TIME) {
 +
        setTime(pc);      //Ajusta la fecha-hora
 +
      }
 +
  }
 +
}
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 4 ==
 +
Mostramos las cadenas de dia y mes. Recuerde que no es opcional el parametro.
 +
 
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
 +
#include <TimeLib.h>
 +
void setup(){
 +
  Serial.begin(9600);
 +
  for (byte n=1; n<=7; n++){
 +
      Serial.print(dayStr(n));
 +
      Serial.print(" - ");
 +
      Serial.println(dayShortStr(n));
 +
  }
 +
  Serial.println("-------");
 +
  for (byte n=1; n<=12; n++){
 +
      Serial.print(monthStr(n));
 +
      Serial.print(" - ");
 +
      Serial.println(monthShortStr(n));
 +
  }
 +
}
 +
void loop(){
 +
  //Nada
 +
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Línea 30: Línea 287:
 
== Referencias externas ==
 
== Referencias externas ==
 
* [https://www.arduinolibraries.info/libraries All Libraries]
 
* [https://www.arduinolibraries.info/libraries All Libraries]
 +
* [http://playground.arduino.cc/code/time Time] de Paul Stoffregen
 +
* [https://github.com/PaulStoffregen/TimeAlarms TimeAlarms] de Paul Stoffregen
 +
* [https://github.com/PaulStoffregen/TimerOne TimerOne] de Paul Stoffregen
 +
* [http://www.arduino.cc/playground/Code/TimedAction TimedAction] de Alexander Brevig
  
 
[[Category:Librerias]]
 
[[Category:Librerias]]
 +
[[Category:Libreria Time]]

Revisión actual del 22:21 15 jul 2019

Descripción

La librería TimeLib.h de Paul Stoffregen...

Placas aplicables

Todas.

time_t

time_t es un tipo unsigned long de 4 byte (32 bits) usado para almacenar los segundos transcurridos desde el 1-ENE-1970 o también llamada Unix Time Stamp.

Sintaxis

time_t variable [= valor];

Parámetros

variable
Nombre de la variable que definiras.
valor
Numero del tipo TimeStamp de UNIX. Numero tipo unsigned long.

Funciones

Funciones disponibles para time_t
Función Descripción Ejemplo
now() Almacena la hora actual en tiempo UNIX time_t t = now();
year() Muestra el año year();
month() Muestra el mes (1~12) month();
monthStr() Nombre del mes (January, February, March, April, May, June, July...) monthStr(month());
monthShortStr() Nombre corto del mes (Jan, Feb, Mar, Dic) monthShortStr(month());
day() Muetsra el dia (1~31) day();
weekday() Muestra dia de la semana (1=domingo) (1~7) weekday();
dayStr() Nombre del dia (Sunday, Monday, Tuesday, Wenesday, Thursday, Friday, Saturday) dayStr(weekday());
dayShortStr() Nombre corto del dia (Sun, Mon, Tue, Wen, Thu, Fri, Sat) dayShortStr(weekday());
hour() Muestra las horas (0~23) hour();
minute() Muestra los minutos (0~59) minute();
second() Muestra los segundos (0~59) second();
millis() Muestra los milisegundos (0~999) millis();
hourFormat12() Formatea a 12 horas
isAM() Devuelve verdadero por la mañana isAM()
isPM() Devuelve verdadero por la tarde isPM();
setTime() Establece fecha-hora. Puede ser en segundos o hr,min,sec,dia,mes,año. setTime(0,0,0,14,7,2018);
adjustTime() Ajusta la fecha-hora del sistema agregando un valor adjustTime(3600);
setSyncProvider() Establecer proveedor de hora externa
setSyncInterval() Establecer el número de segundos entre re-sincronizaciones
makeTime() Convierte variable tipo tmElement_t en variable tipo time_t makeTime(tm);
breakTime() Convierte variable tipo time_t en variable tipo tmElement_t makeTime(tm);
timeStatus() Indica si el tiempo se sincronizado recientemente. Devuelve: timeNotSet/timeNeedSync/timeSet

tmElements_t

tmElements_t es una matriz de seis (6) elementos que proporciona la libreria TimeLib.h y que permite manipular de manera fácil (sin tener que usar el Tiempo Unix) todos los elementos necesarios para definir una fecha-hora.

Sintaxis

tmElements_t variable;

Parámetros

variable
Nombre de la variable que definiras.

Métodos

Metodos disponibles para tmElementos_t
Metodo Descripcion
.Second Segundo (0~59)
.Minute Minuto (0~59)
.Hour Hora (0~23)
.Day Dia (1~31)
.Month Mes (1~12)
.Year Año (0~99) resta de 1970.
makeTime() Convierte variable tipo tmElements_t en variable tipo time_t.
breakTime() Convierte variable tipo time_t en variable tipo tmElements_t.

Nota: Para representar el año 2019 debes poner 49 (2019-1970) y no olvidar sumar 1920 nuevamente al resultado.


Comentarios

Advertencias

Ejemplo 1

En este ejemplo incluimos la fecha hora 2018-7-14 10:0:0 y mostramos su avance cada 1350 milisegundos.

#include <TimeLib.h>
void setup(){
   Serial.begin(9600);
   setTime(10,0,0,14,7,2018);  //h,min,seg,dia,mes,año
}
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

En este ejemplo podemos enviar la fecha-hora por consola serie. Para convertir Unix Time te recomiendo usar esto. Ejemplo: T1552204800 = 2019-MAR-10 8:00:00

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

void setup()  {
   Serial.begin(9600);
   while (!Serial);        //Solo se requiere para Leonardo
   pinMode(13, OUTPUT);
   Serial.println("Esperando mensaje de sincronizacion");
}

void loop(){    
   if (Serial.available()) {
      sincro();
   }
   if (timeStatus() == timeSet) {
      pantalla();                  //Muestra fecha hora
      digitalWrite(13, HIGH);      //Sincronizado
   }else{
      digitalWrite(13, LOW);       //Requiere sincronizar
   }
   delay(1000);
}

void sincro() {
   if (Serial.find(TIME_HEADER)) {
      unsigned long pctime = Serial.parseInt();
      if (pctime >= 1357041600) {       //Verifica valides de fecha-hora (mayor a 1-ENE-2013)
         setTime(pctime);               //Sincroniza reloj Arduino con fecha-hora recivida por puerto serie
      }
   }
}

void pantalla(){
   Serial.print(year()); 
   Serial.print('-');
   Serial.print(month());
   Serial.print('-');
   Serial.print(day());
   Serial.print(' ');
   Serial.print(hour());
   printDigito(minute());
   printDigito(second());
   Serial.println();
}

void printDigito(int dig){
   Serial.print(':');
   if (dig < 10){
      Serial.print('0');
   }
   Serial.print(dig);
}

Ejemplo 3

Con este ejemplo Arduino espera que se envíe desde el monitor un tiempo UNIX del formato T1531526400 (2018-7-14 0:0:0).

#include <TimeLib.h>

void setup(){
   Serial.begin(9600);
   pinMode(13, OUTPUT);
   Serial.println("Esperando tiempo UNIX por puerto serie");
}

void loop(){    
   if (Serial.available()) {
      sincroniza();
   }
   if (timeStatus()!= timeNotSet) {
      reloj();  
   }
   if (timeStatus() == timeSet) {
      digitalWrite(13, HIGH); //Sincronizado
   }else{
      digitalWrite(13, LOW);  //Falta sincronizar
   }
   delay(1000);
}

void reloj(){
   Serial.print(year()); 
   Serial.print("-");
   if (month()<10){
      Serial.print('0');
   }
   Serial.print(month());
   Serial.print("-");
   if (day()<10){
      Serial.print('0');
   }
   Serial.print(day());
   Serial.print(" ");
   if (hour()<10){
      Serial.print('0');
   }
   Serial.print(hour());
   Serial.print(":");
   if (minute() < 10){
      Serial.print('0');
   }
   Serial.print(minute());
   Serial.print(":");
   if (second() < 10){
      Serial.print('0');
   }
   Serial.println(second());
}

void sincroniza() {
   const unsigned long DEFAULT_TIME = 1514764800; //1-ENE-2018

   if (Serial.find("T")) {
      unsigned long pc = Serial.parseInt();
      //Controla valides mayor a 1-ENE-2018
      if (pc >= DEFAULT_TIME) { 
         setTime(pc);      //Ajusta la fecha-hora
      }
   }
}

Ejemplo 4

Mostramos las cadenas de dia y mes. Recuerde que no es opcional el parametro.

#include <TimeLib.h>
void setup(){
   Serial.begin(9600);
   for (byte n=1; n<=7; n++){
      Serial.print(dayStr(n));
      Serial.print(" - ");
      Serial.println(dayShortStr(n));
   }
   Serial.println("-------");
   for (byte n=1; n<=12; n++){
      Serial.print(monthStr(n));
      Serial.print(" - ");
      Serial.println(monthShortStr(n));
   }
}
void loop(){
   //Nada
}

Vea también


Referencias externas