Buenos días, soy Emanuel, es mi primera publicación en el foro y espero poder resolver mi problema jeje. Resulta que hace una semana comencé un proyecto en Arduino de un timbre escolar automático. Estoy usando un Arduino UNO , un modulo reloj DS3231 y un relé doble.
Resulta que he estado haciendo diferentes pruebas, con diferentes códigos, algunos escritos por mi y otros que encontré en la web, pero siempre tengo el mismo problema, el timbre no logra funcionar completamente en todos los horarios que le fijo. Quiero decir, tengo el horario de la tarde y el de la mañana, no he conseguido que mi timbre suene perfectamente en todos los horarios sin excepción por un día, y el objetivo es que funcione 24/7 a excepción de los fines de semana claro. Testeando algunas veces, con mis códigos anteriores llegué a la conclusión que, algunas veces el arduino, luego de sonar un timbre, quedaba atrapado o pegado y no volvía a correr el programa. En la última versión de mi código, esto no debería pasar ya que no uso un delay luego de apagar y prender el timbre, pero el problema que tengo actualmente es similar. Me gustaría saber que es lo que está fallando ahora, esta ultima versión, es una versión recortada del código del profe garcia, de su vídeo en YT de como hacer un timbre escolar. Adjunto este código y espero su respuesta:
// NOTA: se debe cargar dos veces este programa 1. Con la linea RTC.adjust(DateTime(__DATE__, __TIME__));
// 2. Sin esa linea
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 RTC; // inicializa el modulo RTC
int r_diaSemana; // almacena el resultado del dia de la semana calculado
const int timbre = 13; // Pin 13 encargado de activar el timbre, se conecta al Rele
int segundo;
int minuto;
int hora;
int tiempo_timbre=6000; // Tiempo continuo que dura el timbre sonando, en milisegundos 5000 = 5 segundos
//////////////////////////////// Horario 1 /////////////////////////
// Hora en la que suena el timbre escrito h1=Hora, m1=Minutos, s1=Segundos
// Cuando no se programa ninguna hora se debe dejar escrito el numero 99
// se pueden programar 16 timbres por cada horario, _c1 indica que es el horario 1
int h1_c1=7; int m1_c1=30; int s1_c1=0;
int h2_c1=8; int m2_c1=15; int s2_c1=0;
int h3_c1=8; int m3_c1=20; int s3_c1=0;
int h4_c1=9; int m4_c1=5; int s4_c1=0;
int h5_c1=9; int m5_c1=10; int s5_c1=0;
int h6_c1=9; int m6_c1=55; int s6_c1=0;
int h7_c1=10; int m7_c1=0; int s7_c1=0;
int h8_c1=10; int m8_c1=45; int s8_c1=0;
int h9_c1=10; int m9_c1=50; int s9_c1=0;
int h10_c1=11; int m10_c1=35; int s10_c1=0;
int h11_c1=11; int m11_c1=40; int s11_c1=0;
int h12_c1=12; int m12_c1=25; int s12_c1=0;
int h13_c1=12; int m13_c1=30; int s13_c1=0;
int h14_c1=13; int m14_c1=15; int s14_c1=0;
int h15_c1=99; int m15_c1=0; int s15_c1=0;
int h16_c1=99; int m16_c1=0; int s16_c1=0;
//////////////////////////////// Horario 2 /////////////////////////
int h1_c2=12; int m1_c2=45; int s1_c2=0;
int h2_c2=13; int m2_c2=30; int s2_c2=0;
int h3_c2=13; int m3_c2=35; int s3_c2=0;
int h4_c2=14; int m4_c2=20; int s4_c2=0;
int h5_c2=14; int m5_c2=25; int s5_c2=0;
int h6_c2=15; int m6_c2=10; int s6_c2=0;
int h7_c2=15; int m7_c2=15; int s7_c2=0;
int h8_c2=16; int m8_c2=0; int s8_c2=0;
int h9_c2=16; int m9_c2=5; int s9_c2=0;
int h10_c2=16; int m10_c2=50; int s10_c2=0;
int h11_c2=16; int m11_c2=55; int s11_c2=0;
int h12_c2=17; int m12_c2=40; int s12_c2=0;
int h13_c2=17; int m13_c2=45; int s13_c2=0;
int h14_c2=18; int m14_c2=30; int s14_c2=0;
int h15_c2=99; int m15_c2=0; int s15_c2=0;
int h16_c2=99; int m16_c2=0; int s16_c2=0;
////////////////////////////////// Void Setup() ///////////
void setup () {
pinMode(timbre, OUTPUT); // Configura como salida el pin 13
Wire.begin();
RTC.begin(); // Inicia la comunicaci¢n con el RTC
// RTC.adjust(DateTime(__DATE__, __TIME__)); // Lee la fecha y hora del PC (Solo en la primera carga)
// el anterior se usa solo en la configuracion inicial luego se pone como comentario
// y se vuelve a cargar el programa sin esa linea.
Serial.begin(9600); // Establece la velocidad de datos del puerto serie a 9600
}
////////////////////////////////// Void loop() ///////////
void loop(){
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
Serial.print(now.year(), DEC); // A¤o
Serial.print('/');
Serial.print(now.month(), DEC); // Mes
Serial.print('/');
Serial.print(now.day(), DEC); // Dia
Serial.print(' ');
Serial.print(now.hour(), DEC); // Horas
Serial.print(':');
Serial.print(now.minute(), DEC); // Minutos
Serial.print(':');
Serial.print(now.second(), DEC); // Segundos
Serial.println();
segundo=now.second();
minuto=now.minute();
hora=now.hour();
int r_diaSemana= now.dayOfTheWeek(); // llama a la funcion que calcula el dia de la semana y lo almacena en r_diaSemana
if (r_diaSemana == 6 || r_diaSemana == 0){ // si fin de semana no hace nada
}
else {
if(hora >=7 && hora<14){
horario_1(); // llama a la funcion que activa el horario 1
}
if(hora >=12 && hora<19){
horario_2(); // llama a la funcion que activa el horario 1
}
}
digitalWrite(timbre, HIGH); // apaga el timbre
delay(1000); // La informaci¢n se actualiza cada 1 seg.
} //////////////////////////////// Fin del void loop(), inician las Funciones/////////////////////////
/////////////////////////////// Funcion que activa el Timbre //////////////////////////////////
void activar_timbre(){
digitalWrite(timbre, LOW);
Serial.println("Timbre Activo");
delay(tiempo_timbre);
}
/////////////////////Condicional del Horario 1 //////////////////////////////////
void horario_1(){
Serial.print("Horario_1 ");
if ((hora==h1_c1) && (minuto==m1_c1) && (segundo==s1_c1)) activar_timbre();
if ((hora==h2_c1) && (minuto==m2_c1) && (segundo==s2_c1)) activar_timbre();
if ((hora==h3_c1) && (minuto==m3_c1) && (segundo==s3_c1)) activar_timbre();
if ((hora==h4_c1) && (minuto==m4_c1) && (segundo==s4_c1)) activar_timbre();
if ((hora==h5_c1) && (minuto==m5_c1) && (segundo==s5_c1)) activar_timbre();
if ((hora==h6_c1) && (minuto==m6_c1) && (segundo==s6_c1)) activar_timbre();
if ((hora==h7_c1) && (minuto==m7_c1) && (segundo==s7_c1)) activar_timbre();
if ((hora==h8_c1) && (minuto==m8_c1) && (segundo==s8_c1)) activar_timbre();
if ((hora==h9_c1) && (minuto==m9_c1) && (segundo==s9_c1)) activar_timbre();
if ((hora==h10_c1) && (minuto==m10_c1) && (segundo==s10_c1)) activar_timbre();
if ((hora==h11_c1) && (minuto==m11_c1) && (segundo==s11_c1)) activar_timbre();
if ((hora==h12_c1) && (minuto==m12_c1) && (segundo==s12_c1)) activar_timbre();
if ((hora==h13_c1) && (minuto==m13_c1) && (segundo==s13_c1)) activar_timbre();
if ((hora==h14_c1) && (minuto==m14_c1) && (segundo==s14_c1)) activar_timbre();
if ((hora==h15_c1) && (minuto==m15_c1) && (segundo==s15_c1)) activar_timbre();
if ((hora==h16_c1) && (minuto==m16_c1) && (segundo==s16_c1)) activar_timbre();
}
////////////////////Condicional del Horario 2 //////////////////////////////////
void horario_2(){
Serial.print("Horario_2 ");
if ((hora==h1_c2) && (minuto==m1_c2) && (segundo==s1_c2)) activar_timbre();
if ((hora==h2_c2) && (minuto==m2_c2) && (segundo==s2_c2)) activar_timbre();
if ((hora==h3_c2) && (minuto==m3_c2) && (segundo==s3_c2)) activar_timbre();
if ((hora==h4_c2) && (minuto==m4_c2) && (segundo==s4_c2)) activar_timbre();
if ((hora==h5_c2) && (minuto==m5_c2) && (segundo==s5_c2)) activar_timbre();
if ((hora==h6_c2) && (minuto==m6_c2) && (segundo==s6_c2)) activar_timbre();
if ((hora==h7_c2) && (minuto==m7_c2) && (segundo==s7_c2)) activar_timbre();
if ((hora==h8_c2) && (minuto==m8_c2) && (segundo==s8_c2)) activar_timbre();
if ((hora==h9_c2) && (minuto==m9_c2) && (segundo==s9_c2)) activar_timbre();
if ((hora==h10_c2) && (minuto==m10_c2) && (segundo==s10_c2)) activar_timbre();
if ((hora==h11_c2) && (minuto==m11_c2) && (segundo==s11_c2)) activar_timbre();
if ((hora==h12_c2) && (minuto==m12_c2) && (segundo==s12_c2)) activar_timbre();
if ((hora==h13_c2) && (minuto==m13_c2) && (segundo==s13_c2)) activar_timbre();
if ((hora==h14_c2) && (minuto==m14_c2) && (segundo==s14_c2)) activar_timbre();
if ((hora==h15_c2) && (minuto==m15_c2) && (segundo==s15_c2)) activar_timbre();
if ((hora==h16_c2) && (minuto==m16_c2) && (segundo==s16_c2)) activar_timbre();
}
Cualquier comentario es de ayuda, espero su respuesta! Gracias!