Diferencia entre revisiones de «time t»

De ArduWiki
Saltar a: navegación, buscar
(Funciones)
(Vea también)
 
(No se muestran 6 ediciones intermedias del mismo usuario)
Línea 18: Línea 18:
 
|[[now()]]||Almacena la hora actual en tiempo UNIX||time_t t = now();
 
|[[now()]]||Almacena la hora actual en tiempo UNIX||time_t t = now();
 
|-
 
|-
|year()||Muestra el año||year(t);
+
|year()||Muestra el año||year();
 
|-
 
|-
|month()||Muestra el mes (1~12)||mont(t);
+
|month()||Muestra el mes (1~12)||month();
 
|-
 
|-
|weekday()||Muestra dia de la semana (1=domingo) (1~7)||weekday(t);
+
|monthStr()||Nombre del mes (January, February, March, April, May, June, July...)||monthStr(month());
 
|-
 
|-
|day()||Muetsra el dia (1~31)||day(t);
+
|monthShortStr()||Nombre corto del mes (Jan, Feb, Mar, Dic) ||monthShortStr(month());
 
|-
 
|-
|hour()||Muestra las horas (0~23)||hour(t);
+
|day()||Muetsra el dia (1~31)||day();
 
|-
 
|-
|minute()||Muestra los minutos (0~59)||minute(t);
+
|weekday()||Muestra dia de la semana (1=domingo) (1~7)||weekday();
 
|-
 
|-
|second()||Muestra los segundos (0~59)||second(t);
+
|dayStr()||Nombre del dia (Sunday, Monday, Tuesday, Wenesday, Thursday, Friday, Saturday)||dayStr(weekday());
 
|-
 
|-
|[[millis()]]||Muestra los milisegundos (0~999)||millis();
+
|dayShortStr()||Nombre corto del dia (Sun, Mon, Tue, Wen, Thu, Fri, Sat)||dayShortStr(weekday());
 
|-
 
|-
|hourFormat12()||Formatea a 12 horas||
+
|hour()||Muestra las horas (0~23)||hour();
 
|-
 
|-
|isAM()||Devuelve verdadero por la mañana||isAM(t)
+
|minute()||Muestra los minutos (0~59)||minute();
 
|-
 
|-
|isPM()||Devuelve verdadero por la tarde||isPM(t);
+
|second()||Muestra los segundos (0~59)||second();
 
|-
 
|-
|monthStr()||Nombre del mes||monthStr(t);
+
|[[millis()]]||Muestra los milisegundos (0~999)||millis();
 
|-
 
|-
|monthShortStr()||Nombre del mes corto||monthShortStr(t);
+
|hourFormat12()||Formatea a 12 horas||
 
|-
 
|-
|dayStr()||Nombre del dia||dayStr(t);
+
|isAM()||Devuelve verdadero por la mañana||isAM()
 
|-
 
|-
|dayShortStr()||Nombre del dia corto||dayShortStr(t);
+
|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);
 
|[[setTime()]]||Establece fecha-hora. Puede ser en segundos o hr,min,sec,dia,mes,año.||setTime(0,0,0,14,7,2018);
Línea 55: Línea 55:
 
|-
 
|-
 
|[[setSyncInterval()]]||Establecer el número de segundos entre re-sincronizaciones||
 
|[[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||
 
|[[timeStatus()]]||Indica si el tiempo se sincronizado recientemente. Devuelve: timeNotSet/timeNeedSync/timeSet||
Línea 68: Línea 64:
  
 
== Advertencias ==
 
== Advertencias ==
* Tenga en cuenta que se requiere un parámetro para estas funciones de cadena. El argumento NO es la marca de tiempo, por ejemplo, '''time_t''', pero debe ser algo así como month(t). Entonces monthStr(month(t)) o dayStr(day(t)) funcionará.
+
* Tenga en cuenta que NO se requiere un parámetro para las funciones basicas. Sin embargo como el reloj sigue funcionando la demora en mostrar la hora no sera la misma si capturamos el tiempo en una variable del tipo time_t y la introducimos en las funciones.
 +
* Un caso especial son las funciones de texto que requeriran incluir un valor o función para determinar su valor: dayStr(week(t)), dayShortStr(week(t)), monthStr(month()) y monthShortStr(month()).
  
 
== Ejemplo 1 ==
 
== Ejemplo 1 ==
Línea 214: Línea 211:
 
       }
 
       }
 
   }
 
   }
 +
}
 +
</syntaxhighlight>
 +
 +
== Ejemplo 4 ==
 +
Mostramos las cadenas de dia y mes. Recuerde que no es opcional el parametro.
 +
 +
<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>
  
 
== Vea también ==
 
== Vea también ==
* [[Fecha y hora]]
+
<categorytree mode=all>Libreria Time</categorytree>
* [[tmElements_t]] - TimeLib.h
 
* [[setTime()]] - TimeLib.h
 
* [[adjustTime()]] - TimeLib.h
 
* [[timeStatus()]] - TimeLib.h
 
* [[makeTime()]] - TimeLib.h
 
* [[breakTime()]] - TimeLib.h
 
* [[DateTime]] - RTClib.h
 
  
 
== Referencias ==
 
== Referencias ==

Revisión actual del 00:03 6 may 2019

Descripcion

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
timeStatus() Indica si el tiempo se sincronizado recientemente. Devuelve: timeNotSet/timeNeedSync/timeSet

Comentarios

  • La libreria TimeLib.h agrega la funcionalidad de reloj a Arduino sin hardware externo. Permite que un boceto obtenga la hora y la fecha como: segundo, minuto, hora, día, mes y año.
  • También proporciona tiempo time_t estándar, por lo que los tiempos transcurridos se pueden calcular fácilmente y los valores de tiempo se pueden compartir en diferentes plataformas.

Advertencias

  • Tenga en cuenta que NO se requiere un parámetro para las funciones basicas. Sin embargo como el reloj sigue funcionando la demora en mostrar la hora no sera la misma si capturamos el tiempo en una variable del tipo time_t y la introducimos en las funciones.
  • Un caso especial son las funciones de texto que requeriran incluir un valor o función para determinar su valor: dayStr(week(t)), dayShortStr(week(t)), monthStr(month()) y monthShortStr(month()).

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