Hola ! Ante todo buenas tardes, soy nuevo en la comunidad y he empezado con algunas prácticas simples de Arduino hace muy poco, vamos al grano.. Vi muchos foros sobre este tema y ninguno me lo ha solucionado. Estoy operando con un Arduino Uno, necesito temporizar unas luces en tiempo real. Para ello programé el RTC del DS1302, hasta ahí todo bien. El integrado que está con su pila conserva el horario a la perfección visto por el puerto serie. El problema es que he programado Alarmas con la librería TimeAlarms, y nunca se ejecutan, revisando un poco veo que mí duino nunca se sincroniza con el RTC. Vi muchos casos de cómo sincronizar con el DS1307 que se ve bastante sencillo pero por lo que veo es diferente al DS1302. Probé muchas alternativas pero no logro sincronizarlo. Más tarde adjunto el código a ver si alguno me podría ayudar, supongo que estoy trabado en algo sencillo. Gracias
#include <Time.h>
#include <TimeAlarms.h>
#include <DS1302.h>
AlarmId id;
DS1302 rtc(2, 3, 5);
void setup() {
Serial.begin(9600);
while (!Serial) ;
rtc.halt(false);
rtc.writeProtect(false);
// rtc.setDOW(FRIDAY); // Formateo horario
// rtc.setTime(19, 8, 0); // Set de Horas
// rtc.setDate(19, 7, 2019); // Set de Fecha
// supongo que aqui deberia sincronizar el Time del arduino con el RTC
if (timeStatus() != timeSet) //Comparo el estado del reloj con el set de horario para ver si coincide el RTC
Serial.println("Fallo de RTC");
else
Serial.println("Sincronizado con RTC");
pinMode(9,OUTPUT);
pinMode(10, OUTPUT);
// Creo alarmas especificas de tiempo
Alarm.alarmRepeat(02,05,0, Alarma1); // Alarma 1
Alarm.alarmRepeat(02,07,0, Alarma2); // Alarma 2
Alarm.alarmRepeat(dowSaturday,8,30,30,WeeklyAlarm); // Todos los sabados
}
void loop() {
digitalClockDisplay();
Alarm.delay(1000); // wait one second between clock display
}
// functions to be called when an alarm triggers:
void Alarma1() {
Serial.println("ALARMA 1 !!!!");
digitalWrite(9, HIGH);
}
void Alarma2() {
Serial.println("ALARMA 2 !!!!");
digitalWrite(10, HIGH);
}
void WeeklyAlarm() {
Serial.println("ALARMA todos los sabados");
}
void OnceOnly() {
Serial.println("This timer only triggers once, stop the 2 second timer");
// use Alarm.free() to disable a timer and recycle its memory.
Alarm.free(id);
// optional, but safest to "forget" the ID after memory recycled
id = dtINVALID_ALARM_ID;
// you can also use Alarm.disable() to turn the timer off, but keep
// it in memory, to turn back on later with Alarm.enable().
}
void digitalClockDisplay() {
Serial.println(rtc.getDOWStr()); //Leo a través del DS1302 el tiempo real
Serial.println(rtc.getDateStr()); // Si intento leer el horario del arduino comienza de cero cada vez que lo
Serial.println(rtc.getTimeStr()); // energizo
Serial.println();
}
Que las alarmas de TimeAlarm no se ejecuten se debe a otra cosa. te aseguro que si funcionan.
Cuando tienes problemas de este tipo, lo mejor es colocar el link de la librería que usas o decirnos de donde la has sacado.
MIra esta librería y observa como sinconiza el RTC con el reloj interno.
Y este ejemplo TimeRTC.ino justamente hace lo que tu no has podido.
pero debes usar este set de librerías.