Diferencia entre revisiones de «setTime()»
(→Parametros) |
(→Vea también) |
||
(No se muestran 12 ediciones intermedias del mismo usuario) | |||
Línea 11: | Línea 11: | ||
;ss:Segundos transcurridos desde 1-ENE-1970 | ;ss:Segundos transcurridos desde 1-ENE-1970 | ||
;h:Hora (0~23) | ;h:Hora (0~23) | ||
− | ;m | + | ;m:Minuto (0~59) |
;s:Segundo (0~59) | ;s:Segundo (0~59) | ||
;dia:Dia (1~31) | ;dia:Dia (1~31) | ||
Línea 18: | Línea 18: | ||
== Comentarios == | == Comentarios == | ||
+ | * Si necesitas hacer conversiones entre fecha y '''Unix Time Stamp''' usa [https://www.unixtimestamp.com/ Epoch Converter] | ||
+ | * El formato '''Unix Time Stamp''' es muy util para hacer operaciones entre dos fechas. | ||
== Advertencias == | == Advertencias == | ||
+ | Es indispensable incluir en el [[boceto]] '''#include <TimeLib.h>''' para que funcione o arrojara un error. | ||
== Ejemplo 1 == | == Ejemplo 1 == | ||
− | + | Creamos un reloj sin hardware externo y mostramos la h:m:s.milisegundos cada segundo usando un [[delay()]]. Las funciones estan vacias. | |
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
Línea 28: | Línea 31: | ||
void setup(){ | void setup(){ | ||
Serial.begin(9600); | Serial.begin(9600); | ||
− | setTime(10,0,0,14,7,2018); //h, | + | //setTime(1531562400); //Unix Time Stamp |
+ | setTime(10,0,0,14,7,2018); //Formato h,m,s,d,m,a | ||
+ | } | ||
+ | void loop(){ | ||
+ | Serial.print(hour()); | ||
+ | Serial.print(":"); | ||
+ | Serial.print(minute()); | ||
+ | Serial.print(":"); | ||
+ | Serial.print(second()); | ||
+ | Serial.print("."); | ||
+ | Serial.println(millis()); | ||
+ | delay(1000); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | {{Nota|Mira la secuencia cada ves hay 1001 milisegundos mas. Es debido a que el tiempo continua corriendo.}} | ||
+ | |||
+ | == Ejemplo 2 == | ||
+ | En este ejemplo incluimos la fecha hora 2018-7-14 10:0:0 y mostramos su avance cada 1350 milisegundos. Cada ciclo consultamos la hora y la guardamos en una variable por lo que ahora todas las funciones usan exactamente la misma hora. | ||
+ | |||
+ | <syntaxhighlight lang="c++"> | ||
+ | #include <TimeLib.h> | ||
+ | void setup(){ | ||
+ | Serial.begin(9600); | ||
+ | //setTime(1531562400); //Unix Time Stamp | ||
+ | setTime(10,0,0,14,7,2018); //Formato h,m,s,d,m,a | ||
} | } | ||
void loop(){ | void loop(){ | ||
Línea 39: | Línea 67: | ||
delay(1350); | delay(1350); | ||
} | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Ejemplo 3 == | ||
+ | Muestra Arduino como un reloj sin hardware externo. Se sincroniza por mensajes enviados por el puerto serie, muestra la fecha y hora cada segundo por consola y administra el LED incorporado. Debes enviar algo como T1531562400 (2018-7-14 10:00:00). | ||
+ | |||
+ | <syntaxhighlight lang="c++"> | ||
+ | #include <TimeLib.h> | ||
+ | #define TIME_HEADER "T" //Encabezado de mensaje de sincronizacion | ||
+ | |||
+ | void setup() { | ||
+ | Serial.begin(115200); | ||
+ | pinMode(13, OUTPUT); | ||
+ | Serial.println("Esperando sincronizacion"); | ||
+ | } | ||
+ | |||
+ | void loop(){ | ||
+ | if (Serial.available()) { | ||
+ | sinc(); | ||
+ | } | ||
+ | if (timeStatus()!= timeNotSet) { | ||
+ | printFecha(); | ||
+ | } | ||
+ | if (timeStatus() == timeSet) { | ||
+ | digitalWrite(13, HIGH); //Esta sincronizado | ||
+ | }else{ | ||
+ | digitalWrite(13, LOW); //Requiere sincronizacion | ||
+ | } | ||
+ | delay(1000); | ||
+ | } | ||
+ | |||
+ | void printFecha(){ | ||
+ | if (day() < 10){ | ||
+ | Serial.print("0"); | ||
+ | } | ||
+ | Serial.print(day()); //dia | ||
+ | Serial.print("-"); | ||
+ | if (month() < 10){ | ||
+ | Serial.print("0"); | ||
+ | } | ||
+ | Serial.print(month()); //mes | ||
+ | Serial.print("-"); | ||
+ | Serial.print(year()); //año | ||
+ | Serial.print(" "); | ||
+ | if (hour() < 10){ | ||
+ | Serial.print("0"); | ||
+ | } | ||
+ | Serial.print(hour()); //hora | ||
+ | Serial.print(":"); | ||
+ | if (minute() < 10){ | ||
+ | Serial.print("0"); | ||
+ | } | ||
+ | Serial.print(minute()); //minutos | ||
+ | Serial.print(":"); | ||
+ | if (second() < 10){ | ||
+ | Serial.print("0"); | ||
+ | } | ||
+ | Serial.println(second()); //segundos | ||
+ | } | ||
+ | |||
+ | void sinc() { | ||
+ | if (Serial.find(TIME_HEADER)) { | ||
+ | unsigned long pctime = Serial.parseInt(); | ||
+ | if (pctime >= 1357041600) { //1-ENE-2013 | ||
+ | setTime(pctime); //Sincroniza reloj Arduino | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Ejemplo 4 == | ||
+ | |||
+ | <syntaxhighlight lang="c++"> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Vea también == | == Vea también == | ||
− | + | <categorytree mode=all>Libreria Time</categorytree> | |
− | |||
− | |||
− | |||
− | |||
− | |||
== Referencias == | == Referencias == | ||
+ | * [https://www.prometec.net/time-arduino/ Libreria Time] - Prometec | ||
− | [[Category: | + | [[Category:Libreria Time]] |
Revisión actual del 00:04 6 may 2019
Contenido
Descripcion
La función setTime() esta disponible luego de invocada la libreria TimeLib.h y nos permite decirle al Arduino en que día y hora estamos y que a partir de allí mantenga adecuadamente esa fecha hasta su próximo reseteo.
Sintaxsis
setTime(ss); //Numero de segundos desde 1-ENE-1970 setTime(h,m,s,dia,mes,año); //hora, minuto, segundo dia, mes, año.
Parámetros
- ss
- Segundos transcurridos desde 1-ENE-1970
- h
- Hora (0~23)
- m
- Minuto (0~59)
- s
- Segundo (0~59)
- dia
- Dia (1~31)
- mes
- Mes (1~12)
- año
- Año (1970~2069)
Comentarios
- Si necesitas hacer conversiones entre fecha y Unix Time Stamp usa Epoch Converter
- El formato Unix Time Stamp es muy util para hacer operaciones entre dos fechas.
Advertencias
Es indispensable incluir en el boceto #include <TimeLib.h> para que funcione o arrojara un error.
Ejemplo 1
Creamos un reloj sin hardware externo y mostramos la h:m:s.milisegundos cada segundo usando un delay(). Las funciones estan vacias.
#include <TimeLib.h>
void setup(){
Serial.begin(9600);
//setTime(1531562400); //Unix Time Stamp
setTime(10,0,0,14,7,2018); //Formato h,m,s,d,m,a
}
void loop(){
Serial.print(hour());
Serial.print(":");
Serial.print(minute());
Serial.print(":");
Serial.print(second());
Serial.print(".");
Serial.println(millis());
delay(1000);
}
Nota: Mira la secuencia cada ves hay 1001 milisegundos mas. Es debido a que el tiempo continua corriendo.
Ejemplo 2
En este ejemplo incluimos la fecha hora 2018-7-14 10:0:0 y mostramos su avance cada 1350 milisegundos. Cada ciclo consultamos la hora y la guardamos en una variable por lo que ahora todas las funciones usan exactamente la misma hora.
#include <TimeLib.h>
void setup(){
Serial.begin(9600);
//setTime(1531562400); //Unix Time Stamp
setTime(10,0,0,14,7,2018); //Formato h,m,s,d,m,a
}
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 3
Muestra Arduino como un reloj sin hardware externo. Se sincroniza por mensajes enviados por el puerto serie, muestra la fecha y hora cada segundo por consola y administra el LED incorporado. Debes enviar algo como T1531562400 (2018-7-14 10:00:00).
#include <TimeLib.h>
#define TIME_HEADER "T" //Encabezado de mensaje de sincronizacion
void setup() {
Serial.begin(115200);
pinMode(13, OUTPUT);
Serial.println("Esperando sincronizacion");
}
void loop(){
if (Serial.available()) {
sinc();
}
if (timeStatus()!= timeNotSet) {
printFecha();
}
if (timeStatus() == timeSet) {
digitalWrite(13, HIGH); //Esta sincronizado
}else{
digitalWrite(13, LOW); //Requiere sincronizacion
}
delay(1000);
}
void printFecha(){
if (day() < 10){
Serial.print("0");
}
Serial.print(day()); //dia
Serial.print("-");
if (month() < 10){
Serial.print("0");
}
Serial.print(month()); //mes
Serial.print("-");
Serial.print(year()); //año
Serial.print(" ");
if (hour() < 10){
Serial.print("0");
}
Serial.print(hour()); //hora
Serial.print(":");
if (minute() < 10){
Serial.print("0");
}
Serial.print(minute()); //minutos
Serial.print(":");
if (second() < 10){
Serial.print("0");
}
Serial.println(second()); //segundos
}
void sinc() {
if (Serial.find(TIME_HEADER)) {
unsigned long pctime = Serial.parseInt();
if (pctime >= 1357041600) { //1-ENE-2013
setTime(pctime); //Sincroniza reloj Arduino
}
}
}
Ejemplo 4
Vea también
Referencias
- Libreria Time - Prometec