Diferencia entre revisiones de «time t»

De ArduWiki
Saltar a: navegación, buscar
(Ejemplo 2)
(Vea también)
 
(No se muestran 39 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
 
== Descripcion ==
 
== Descripcion ==
'''time_t''' es un tipo [[unsigned long]] usado para almacenar los segundos transcurridos desde el 1-ENE-1970 o también llamada fecha Unix.
+
'''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 7: Línea 7:
 
</pre>
 
</pre>
  
== Parametros ==
+
== Parámetros ==
 +
;variable: Nombre de la variable que definiras.
 +
;valor: Numero del tipo TimeStamp de UNIX. Numero tipo [[unsigned long]].
 +
 
 +
== 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||
 +
|-
 +
|[[timeStatus()]]||Indica si el tiempo se sincronizado recientemente. Devuelve: timeNotSet/timeNeedSync/timeSet||
 +
|}
  
 
== Comentarios ==
 
== Comentarios ==
* La libreria '''Time.h''' agrega la funcionalidad de reloj a Arduino con o sin hardware externo. Permite que un [[boceto]] obtenga la hora y la fecha como: segundo, minuto, hora, día, mes y año.  
+
* La libreria [https://github.com/PaulStoffregen/Time 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.
+
* 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 ==
 
== 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 t.month(). Entonces monthStr(month()) o dayStr(día de la semana()) 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 ==
 +
En este ejemplo incluimos la fecha hora 2018-7-14 10:0:0 y mostramos su avance cada 1350 milisegundos.
 +
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
 +
#include <TimeLib.h>
 
void setup(){
 
void setup(){
 +
  Serial.begin(9600);
 
   setTime(10,0,0,14,7,2018);  //h,min,seg,dia,mes,año
 
   setTime(10,0,0,14,7,2018);  //h,min,seg,dia,mes,año
 
}
 
}
 
void loop(){
 
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>
 
</syntaxhighlight>
  
 
== Ejemplo 2 ==
 
== Ejemplo 2 ==
Si usas la libreria RTClib.h tendras disponible la clase [[DateTime]].
+
En este ejemplo podemos enviar la fecha-hora por consola serie. Para convertir Unix Time te recomiendo [https://www.unixtimestamp.com/ usar esto]. Ejemplo: T1552204800 = 2019-MAR-10 8:00:00
  
DateTime hoy = rtc.noy();
+
<syntaxhighlight lang="c++">
time_t unix = hoy.unixtime();
+
#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>
 
</syntaxhighlight>
  
 
== Ejemplo 3 ==
 
== Ejemplo 3 ==
Con ese ejemplo Arduino espeta que se envie desde el monitor un tiempo UNIX del formato T1531526400 (2018-7-14 0:0:0).
+
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++">
 
<syntaxhighlight lang="c++">
 
#include <TimeLib.h>
 
#include <TimeLib.h>
#define TIME_HEADER  "T"  //Encabezado para enviar hora unix
 
  
 
void setup(){
 
void setup(){
 
   Serial.begin(9600);
 
   Serial.begin(9600);
 
   pinMode(13, OUTPUT);
 
   pinMode(13, OUTPUT);
   Serial.println("Esperando mensaje de sicronizacion por puerto serie");
+
   Serial.println("Esperando tiempo UNIX por puerto serie");
 
}
 
}
  
Línea 90: Línea 202:
  
 
void sincroniza() {
 
void sincroniza() {
  unsigned long pctime;
 
 
   const unsigned long DEFAULT_TIME = 1514764800; //1-ENE-2018
 
   const unsigned long DEFAULT_TIME = 1514764800; //1-ENE-2018
  
   if (Serial.find(TIME_HEADER)) {
+
   if (Serial.find("T")) {
       pctime = Serial.parseInt();
+
       unsigned long pc = Serial.parseInt();
 
       //Controla valides mayor a 1-ENE-2018
 
       //Controla valides mayor a 1-ENE-2018
       if (pctime >= DEFAULT_TIME) {  
+
       if (pc >= DEFAULT_TIME) {  
         setTime(pctime);      //Ajusta la fecha-hora
+
         setTime(pc);      //Ajusta la fecha-hora
 
       }
 
       }
 
   }
 
   }
Línea 103: Línea 214:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== Vea tambien ==
+
== Ejemplo 4 ==
* [[Datetime]]
+
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>
 +
 
 +
== Vea también ==
 +
<categorytree mode=all>Libreria Time</categorytree>
  
 
== Referencias ==
 
== Referencias ==
 
* [https://playground.arduino.cc/Code/Time Guia de referencia Arduino]
 
* [https://playground.arduino.cc/Code/Time Guia de referencia Arduino]
 +
* [https://github.com/PaulStoffregen/Time TimeLib.h] - Paul Stoffregen
 +
* [https://github.com/adafruit/RTClib RTClib.h] - Adafruit
  
[[Category:Variables]]
+
[[Category:Libreria Time]]

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