Diferencia entre revisiones de «time t»
De ArduWiki
(→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 | + | '''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> | ||
− | == | + | == 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 | + | * 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 | + | * 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 == | ||
− | + | 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 | |
− | + | <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> | </syntaxhighlight> | ||
== Ejemplo 3 == | == Ejemplo 3 == | ||
− | Con | + | 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> | ||
− | |||
void setup(){ | void setup(){ | ||
Serial.begin(9600); | Serial.begin(9600); | ||
pinMode(13, OUTPUT); | pinMode(13, OUTPUT); | ||
− | Serial.println("Esperando | + | Serial.println("Esperando tiempo UNIX por puerto serie"); |
} | } | ||
Línea 90: | Línea 202: | ||
void sincroniza() { | void sincroniza() { | ||
− | |||
const unsigned long DEFAULT_TIME = 1514764800; //1-ENE-2018 | const unsigned long DEFAULT_TIME = 1514764800; //1-ENE-2018 | ||
− | if (Serial.find( | + | if (Serial.find("T")) { |
− | + | unsigned long pc = Serial.parseInt(); | |
//Controla valides mayor a 1-ENE-2018 | //Controla valides mayor a 1-ENE-2018 | ||
− | if ( | + | if (pc >= DEFAULT_TIME) { |
− | setTime( | + | setTime(pc); //Ajusta la fecha-hora |
} | } | ||
} | } | ||
Línea 103: | Línea 214: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == Vea | + | == 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> | ||
+ | |||
+ | == 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: | + | [[Category:Libreria Time]] |
Revisión actual del 00:03 6 may 2019
Contenido
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
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
- Guia de referencia Arduino
- TimeLib.h - Paul Stoffregen
- RTClib.h - Adafruit