Diferencia entre revisiones de «Time»
(→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]. | |
=== 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
Contenido
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
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
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
- All Libraries
- Time de Paul Stoffregen
- TimeAlarms de Paul Stoffregen
- TimerOne de Paul Stoffregen
- TimedAction de Alexander Brevig