RTClib – Libreria I2C Real Time Clock para Arduino.

Bajo mi punto de vista la mejor librería para relojes RTC en Arduino. Con una simple llamada a la función now() nos devolverá los datos solicitados. Incluye tiempo en UNIX, Dia de la semana. Sincronización con el reloj del sistema al cargar el scketch en nuestra placa.

Última versión: GitHub - RTClib.

// Uso de funciones time y date con reloj RTC DS1307 conectado via I2C
#include <Wire.h>      // Librería I2C
#include "RTClib.h"    // Librería RTClib

RTC_DS1307 rtc;       // Definimos el RTC en la variable rtc

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};  // Array donde almacenamos el texto de los días de la semana

void setup () {
  while (!Serial);  // Esperamos al serial para Leonardo/Micro/Zero

  Serial.begin(57600);
  if (! rtc.begin()) {                     // Si el RTC no puede inicializarse
    Serial.println("Couldn't find RTC");   // Avisamos por el serial
    while (1);                             // Detenemos el programa
  }

  if (! rtc.isrunning()) {                  // Si el RTC no está funcionando
    Serial.println("RTC is NOT running!");  // Avisamos por el serial
      if (! rtc.begin()) {                  // Volvemos a intentar arrancarlo (Carlos)
    Serial.println("Couldn't find RTC");    // Avisamos por el serial si no arranca
      
    while (1);                              // Detenemos el programa
  
      }

  }else{    // Si el reloj está funcionando

// La siguiente línea configura la hora y el dia, haciendo uso de la hora del sistema al subir el sketch a nuestro 
  //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

  // Esta línea configura la hora y el dia con la fecha que indiquemos, por ejemplo:
  // Febrero 16, 2017 a las 12:30:15 am:
  // rtc.adjust(DateTime(2017, 2, 16, 12, 30, 15));
  
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
}

void loop () {
    DateTime now = rtc.now();      // Pedimos la hora al RTC
    
    Serial.print(now.year(), DEC); // Muestra la año
    Serial.print('/');
    Serial.print(now.month(), DEC); // Muestra el mes
    Serial.print('/');
    Serial.print(now.day(), DEC);   // Muestra el dia
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); // Muetra el dia de la semana pasando por el array.
    Serial.print(") ");
    Serial.print(now.hour(), DEC);   // Muestra la hora
    Serial.print(':');
    Serial.print(now.minute(), DEC); // Muestra el minuto
    Serial.print(':');
    Serial.print(now.second(), DEC); // Muestra los segundos
    Serial.println();
    
    Serial.print(" since midnight 1/1/1970 = "); 
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");
    
    //calcular la fecha que será dentro de 7 días y 30 segundos del futuro
    DateTime future (now + TimeSpan(7,12,30,6));
    
    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
    
    Serial.println();
    delay(1000);
}

Comentarios del artículo

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *