dataTime

Librería de Arduino
pic

La librería dataTime nos permite emplear medidas de tiempo real sin necesidad de Hardware, unicamente 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 via 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 methodo makeTime podemos comentarlo, lo que la reduciría a unos 1000 bytes

Los methodos 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:

						#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);  
						}
					
Plantilla Basada en la obra de © 2011 Ansimuz.