Alarma cada hora usando DS3231

Hola amigos

Hace tiempo realice un proyecto, para ser especifico un reloj / termómetro y utilice:
Arduino Pro Mini
Encoder
DS3231
Display 7 segmentos de 4 dígitos
MAX7219

Recientemente le hice algunas mejoras como agregar un LDR para ajuste automático del brillo del display.

**Lo que ahora deseo agregar es un BUZZER y que suene cada hora. **

Por ejemplo a la 1pm, 2pm 3pm y así sucesivamente, cada hora todo el día

Tengo como ejemplo estas lineas de otro código donde use un BUZZER donde suena cada hora y solo por 300ms a una frecuencia de 3500Hz

const int BUZZER = 8;
 
void setup() 
{
}
 
void loop() 
{
  //detener tono durante 3600000ms (1Hora)  
  noTone(BUZZER);
  delay(3600000);
   
  //generar tono de 3500Hz durante 300 ms
  tone(BUZZER, 3500);
  delay(300);
}

Me gustaría usar algo así a mi código del reloj para que haga la función que pretendo

¿Alguien que me ayude sobre como hacer o que agregar al código?

NOTA: Adjunto el código completo de mi proyecto

Clock_Thermometer_Alarm.ino (14.5 KB)

¿Y por qué no leer la hora y cuando los min y seg sean "00" hacer sonar el beep?

Saludos

1 Like

Y como logro hace eso gatul, de contar los minutos y segundos y que a 00 de active el BUZZER?
Tengo que agregar alguna otra librería a mi código, o algún ejemplo de como hacerle?

Para comenzar no tiene sentido usar un reloj y por

delay(3600000);

no hacer nada!!!
Es sencillamente un contrasentido.

Olvida el uso de delay() por favor

Ve a la sección Documentacion => Indice de temas tutoriales => millis()

Su uso hace que puedas ejecutar acciones sin detener el funcionamiento del microcontrolador que es lo que delay() hace.
Por 1 hora no hace nada. Asi que da lo mismo que tengas o no un RTC.
Con millis() sigues atento a todo.

Vamos por partes.
El código que has puesto como ejemplo es inviable, detiene el micro durante una hora para luego hacer un beep y volver a quedar muerto una hora. Claramente eso no es funcional en absoluto.

Respecto al código que has adjuntado, sinceramente me mareó, pero teniendo en cuenta que muestra la hora en el display lo unico que tienes que hacer es, en esa parte del codigo, comparar minutos con 0 y segundos con 0 y si ambas comparaciones son ciertas entonces generas el beep.

Edito: Mientras escribía te ha comentado @surbyte, veras que coincidimos en que el código "de muestra" es una locura. :wink:

Así sonará durante el segundo 0

if (now.minute() == 0 && now.second() == 0) tone(BUZZER, 3500);
else noTone(BUZZER);

Muchas gracias a todos por su ayuda y explicaciones.
Investigue mas sobre lo deseaba agregar a mi código y de un ejemplo que encontré por internet agregue estas líneas al código:

if(ora0 >=00 && minut0 <=00 && second0 <=00 ){
tone(BUZZER, 3500);
delay(300);
noTone(BUZZER);
}
else {
noTone(BUZZER);
delay(1);
}

Cargue el código y por varias horas lo he tenido en prueba y el buzzer si suena una sola vez cada hora.
Si son las 3 p.m. suena, luego a las 4 p.m. suena y así sucesivamente. Es lo que deseaba hacer.

Probare con el código que me compartiste @krnlpanic. Gracias

1 Like

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.