Diferencia entre revisiones de «RTC»
De ArduWiki
(→Ejemplo 2) |
(→Ejemplo 2) |
||
Línea 174: | Línea 174: | ||
== Ejemplo 2 == | == Ejemplo 2 == | ||
− | Este es un reloj con 12 LED que | + | Este es un reloj con 12 LED que prende un LED cada 5 segundos |
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> |
Revisión del 15:37 13 may 2019
Contenido
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
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. |
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 2
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 now = rtc.now();
if (now.unixtime()%5 == 0){
for (byte i=0; i<12; i++){
digitalWrite(led[i], LOW);
}
byte hora = now.second()/5;
digitalWrite(led[hora], HIGH);
}
}
Vea también
Referencias
- Adafruit
- All Libraries
- Reloj con Arduino - Luis Del Valle
- Reloj y calendario con RTC - Luis Llamas
- Tutorial RTC DS1307 - Naylamp
- Proyecto RTC - Prometec