Diferencia entre revisiones de «setTime()»

De ArduWiki
Saltar a: navegación, buscar
(Ejemplo 1)
(Ejemplo 1)
Línea 44: Línea 44:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
== Ejemplo 2 ==
 +
Muestra Arduino como un reloj sin hardware externo. Se sincroniza por mensajes de tiempo enviados a través del puerto serie. Un boceto de procesamiento complementario proporcionará automáticamente estos mensajes si se está ejecutando y está conectado al puerto serie de Arduino.
 +
 +
<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>
  
 
== Vea también ==
 
== Vea también ==

Revisión del 18:18 23 mar 2019

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

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(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 2

Muestra Arduino como un reloj sin hardware externo. Se sincroniza por mensajes de tiempo enviados a través del puerto serie. Un boceto de procesamiento complementario proporcionará automáticamente estos mensajes si se está ejecutando y está conectado al puerto serie de Arduino.

#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
      }
   }
}

Vea también

Referencias