Diferencia entre revisiones de «RTC»

De ArduWiki
Saltar a: navegación, buscar
(Ejemplo 2)
(Ejemplo 2)
Línea 173: Línea 173:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== Ejemplo 2 ==
+
== Ejemplo 3 ==
 
Este es un reloj con 12 LED que prende un LED cada 5 segundos
 
Este es un reloj con 12 LED que prende un LED cada 5 segundos
  

Revisión del 16:24 16 jun 2019

Descripción

La librería RTClib.h de Adafruit que permite trabajar con un reloj por software (RTC_Millis) y algunos relojes físicos como RTC_DS1307, RTC_DS3231 y PCF8523.

Placas aplicables

Todas.

Sintaxis

//#include <Wire.h>  //Solo si usas reloj fisico
#include <RTClib.h>
RTC_Millis rtc;     //Reloj por software
//RTC_DS1307 rtc;   //Reloj con DS1307
//RTC_DS3231 rtc;   //Reloj con DS3231
DateTime variable (año,mes,dia,hora,min,seg);

Parámetros

variable
Nombre de la variable a crear.
año
4 digitos del año.
mes
2 digitos del mes entre 1~12.
dia
2 digitos del dia entre 1~31.
hora
2 digitos de la hora entre 0~23.
min
2 digitos de los minutos entre 0~59.
seg
2 digitos de los segundos entre 0~59.

Métodos

Metodos disponibles libreria RTClib.h
Método Descripción
year() Año
month() Mes (1~12)
day() Dia (1~31)
hour() Horas (0~23)
minute() Minutos (0~59)
second() Segundos (0~59)
dayOfWeek() Dia de la semana (0~6)
now() Toma de fecha y hora actual.
secondstime()
unixtime() Unix timestamp. Segundos desde 1-ENE-1970
adjust() Ajustar fecha y hora
isrunning() Devuelve verdadero si esta ajustada la fecha hora.
readSqwPinMode() Leer el modo. OFF, ON, SquareWave1Hz, SquareWave4kHz, SquareWave8kHz o SquareWave32kHz.
writeSqwPinMode(modo) Escribir modo.
Modos de sqwPinMode()
Modo Frecuencia
SquareWave1Hz 1 kHz
SquareWave4Hz 4.096 kHz
SquareWave8Hz 8.192 kHz
SquareWave32Hz 32.768 kHz

Comentarios

Nada.

Advertencias

Nada.

Ejemplo 1

Si usas la librería RTClib.h tendrás disponible el método .unixtime() que es excelente para hacer operaciones con fechas.

#include <RTClib.h>
DateTime t0 (2018,7,14,8,0,0);           //2018-7-14 8:00:00
//Calculos 1
DateTime t1 = t0 + TimeSpan(0,1,0,0);    //Añadir una hora
DateTime t2 = t0 + TimeSpan(1,0,0,0);    //Añadir un dia
DateTime t3 = t0 - TimeSpan(7,0,0,0);    //Restar una semana
//Calculos 2
DateTime unix = t0.unixtime();           //1531555200
DateTime t1 (t0.unixtime() + 3600);      //Añadir una hora
DateTime t2 (t0.unixtime() + 86400L);    //Añadir un dia
DateTime t3 (t0.unixtime() - 7*86400L);  //Restar una semana
//Mostrar
Serial.print(t0.unixtime());             //1531555200
Serial.print(t0.year());                 //2018
Serial.print(t0.month());                //7
Serial.print(t0.day());                  //14
Serial.print(t0.hour());                 //8
Serial.print(t0.minute());               //0
Serial.print(t0.second());               //0

Ejemplo 2

//#include <Wire.h>   //Solo si usas reloj fisico
#include <RTClib.h>

RTC_Millis rtc;     //Reloj por software
//RTC_DS1307 rtc;   //Reloj con DS1307
//RTC_DS3231 rtc;   //Reloj con DS3231

char diaSemana[7][12] = {"Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"};

void setup () {
   Serial.begin(57600);
   //Para setear RTC con fecha y hora cuando se compila
   rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
   //Para setear RTC a 21-MAR-2019 8:00:00
   //rtc.adjust(DateTime(2019, 3, 21, 8, 0, 0));
}

void loop () {
    DateTime hoy = rtc.now();
    
    Serial.print(hoy.year());
    Serial.print('-');
    Serial.print(hoy.month());
    Serial.print('-');
    Serial.print(hoy.day());
    Serial.print(" (");
    Serial.print(diaSemana[now.dayOfTheWeek()]);
    Serial.print(") ");
    Serial.print(hoy.hour());
    Serial.print(':');
    Serial.print(hoy.minute());
    Serial.print(':');
    Serial.println(hoy.second());
    
    Serial.print("Desde 1-ENE-1970 = ");

    Serial.print("Segundos = ");
    Serial.println(hoy.unixtime());

    Serial.print("Dias = ");
    Serial.println(hoy.unixtime() / 86400L);
    
    //calcula fecha dentro de 7 dias, 12 horas, 30 minutos y 6 segundos
    DateTime futuro (hoy + TimeSpan(7,12,30,6));
    
    Serial.print("Fecha futura: ");
    Serial.print(futuro.year());
    Serial.print('-');
    Serial.print(futuro.month());
    Serial.print('-');
    Serial.print(futuro.day());
    Serial.print(' ');
    Serial.print(futuro.hour());
    Serial.print(':');
    Serial.print(futuro.minute());
    Serial.print(':');
    Serial.print(futuro.second());
    Serial.println();
    
    Serial.println();
    delay(3000);
}

Ejemplo 3

Este es un reloj con 12 LED que prende un LED cada 5 segundos

#include <RTClib.h>
RTC_Millis rtc;
const byte led[12] = {13,2,3,4,5,6,7,8,9,10,11,12};

void setup() { 
   Serial.begin(9600);                           
   rtc.adjust(DateTime(__DATE__, __TIME__));
   for (byte i=0; i<12; i++){
      pinMode(led[i], OUTPUT);
   }
}

void loop() {
   DateTime hoy = rtc.now();
   if (hoy.unixtime()%5 == 0){
      for (byte i=0; i<12; i++){
         digitalWrite(led[i], LOW);
      }
      byte hora = hoy.second()/5;
      digitalWrite(led[hora], HIGH);
   }
}

Vea también


Referencias