Trastejant

Crea, comparte, aprende y disfruta

Librería dataTime

Data time

La librería dataTime nos permite emplear medidas de tiempo real sin necesidad de Hardware, únicamente por software.
Es decir, con ella podemos convertir Arduino en un reloj, y utilizarlo para saber la hora, como despertador, programado basado en la hora, temporizador….
El problema de esta librería es que cada vez que cese la alimentación de Arduino tendremos que volver a ponerlo en hora.
Veamos que métodos nos ofrece:

void sync(time_t time)

Se utiliza para sincronizar o «poner en hora» Arduino empleando una fuente externa, cómo un un ordenador conectado por serial vía USB o empleando una señal de radio, por ejemplo.

time_t now()

Devuelve el tiempo transcurrido desde el inicio de la era UNIX (1/enero/1970)

boolean available()

Actualiza las propiedades de fecha y hora. Devuelve TRUE si el reloj esta sincronizado y FALSE en caso contrario.
Debe usarse siempre antes de llamar a cualquier propiedad de tiempo para asegurarnos de que se nos devuelve la información más actual.

char* monthStr(byte month)

Devuelve un String correspondiente al nombre del mes, enero es el mes 0.

char* dayStr(byte day)

Devuelve un String con el nombre del día, Domingo es el día 0.

Peso de la librería

La librería ocupa 1470 bytes en la memoria de Arduino, pero si no vamos a utilizar el método makeTime podemos comentarlo, lo que la reduciría a unos 1000 bytes.
Los métodos que devuelven los nombres de los meses y los días ocupan unos 310 bytes de memoria Flash y 10bytes de RAM.
Este ejemplo es el que viene con la librería, aquí lo dejamos comentado en castellano para que sea más sencillo de entender:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <DateTime.h> 
#include <DateTimeStrings.h> 
 
#define TIME_MSG_LEN 11 
#define TIME_HEADER 255 
 
void setup(){ 
 Serial.begin(19200); 
} 
 
void loop(){ 
 getPCtime(); // try to get time sync from pc 
 
 //Si el reloj esta sincronizado, lo actualizamos. 
 if(DateTime.available()) { 
 unsigned long prevtime = DateTime.now(); 
 while( prevtime == DateTime.now() ) 
 ; 
 //Actualizar las propiedades de tiempo 
 DateTime.available(); 
 //Actualizamos el display 
 digitalClockDisplay( ); 
 
 // Enviamos el tiempo por puerto serial 
 Serial.print( TIME_HEADER,BYTE); 
 Serial.println(DateTime.now()); 
 } 
} 
 
void getPCtime() { 
 //Si esta disponible la conexión, intentamos poner en hora a Arduino 
 while(Serial.available() >= TIME_MSG_LEN ){ 
 if( Serial.read() == TIME_HEADER ) { 
 time_t pctime = 0; 
 for(int i=0; i < TIME_MSG_LEN -1; i++){ 
 char c= Serial.read(); 
 if( c >= '0' && c <= '9') 
 //convertimos los digitos en un número 
 pctime = (10 * pctime) + (c - '0') ; 
 } 
 //Sincronizamos el reloj con la hora recibida por el puerto serial 
 DateTime.sync(pctime); 
 } 
 } 
} 
 
//Este metodo formatea y muestra los datos 
void digitalClockDisplay(){ 
 
 Serial.print(DateTime.Hour,DEC); 
 printDigits(DateTime.Minute); 
 printDigits(DateTime.Second); 
 Serial.print(" "); 
 Serial.print(DateTimeStrings.dayStr(DateTime.DayofWeek)); 
 Serial.print(" "); 
 Serial.print(DateTimeStrings.monthStr(DateTime.Month)); 
 Serial.print(" "); 
 Serial.println(DateTime.Day, DEC); 
} 
 
void printDigits(byte digits){ 
 
 Serial.print(":"); 
 if(digits < 10) 
 Serial.print('0'); 
 Serial.print(digits,DEC); 
}

También te puede interesar...

No hay temas relacionados

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.