El caso es que estoy haciendo una estación meteorológica en que uso un sensor de temperatura y humedad, otro de presión, uno de luz, y un RTC los cuales estan comunicados con la estación interior
(es decir, hay dos estaciones, la exterior con los sensores i la interior) que tiene otro arduino y una lcd con un menu controlado por un encoder..
Tengo una función en que puedo establecer la hora que quiera para que suene la alarma, y aqui esta el problema.
Tengo puesto un buzzer y un pulsador, al pulsar el pulsador separa la alarma, pero el caso es que el tono del buzzer es muy molesto y vi que se podían hacer tonos pero que si uso Delays influiría con mis sensores y menú(sobre todo el RTC) y por eso acudo a vosotros.
Lo que me gustaría es poner un tono de star wars que encontré en un sitio pero lo veo chungo
Pero para eso no necesitas SD. Solo necesitas el altavoz y armar o comprar un módulo que lo maneje.
Un filtro hecho con resistencias y capacitores, un LM386 y el altavoz
Claro que armar eso si no tienes experiencia no es tarea fácil.
Aca lo tienes Modulo con amplificador para arduino
Tengo un programa que he tomado de por ahi en la web, que reproduce sonidos de hasta los SIMPSON. Imagina
surbyte:
Pero para eso no necesitas SD. Solo necesitas el altavoz y armar o comprar un módulo que lo maneje.
Un filtro hecho con resistencias y capacitores, un LM386 y el altavoz
Claro que armar eso si no tienes experiencia no es tarea fácil.
Aca lo tienes Modulo con amplificador para arduino
Tengo un programa que he tomado de por ahi en la web, que reproduce sonidos de hasta los SIMPSON. Imagina
No, no.
Mi idea no era esta, simplemente quería poner un tono que no sea el que vino con el buzzer i nada más.
Lucario448:
Pero entonces a qué te referías cuando dijiste que no querías oír el feo sonido del buzzer? Que no suene siempre a la misma frecuencia (tono)?
Hay que ser mas claro entonces.. mira la manera de divagar en la que nos hemos metido Lucario y yo.. jajaja
juega con tone(pin, frecuencia, duración);
supongamos pin 10
tone(10, 500, 100); // tono de 500 hz por 100 mseg
tone(10,200, 200); // tono de 200 Hz por 200 mseg
repitelo cambialo, ponlo en un for() y ahi tienes los cambios.
agrega otro tono, todas las opciones.
surbyte:
Hay que ser mas claro entonces.. mira la manera de divagar en la que nos hemos metido Lucario y yo.. jajaja
juega con tone(pin, frecuencia, duración);
supongamos pin 10
tone(10, 500, 100); // tono de 500 hz por 100 mseg
tone(10,200, 200); // tono de 200 Hz por 200 mseg
repitelo cambialo, ponlo en un for() y ahi tienes los cambios.
agrega otro tono, todas las opciones.
Y no influirá con el RTC, el menú del reloj y todo eso?
Leí que sí, que se liaba con los sensores i se atrasaba la hora o no sé
Y si te la rebuscas con los tonos y las duraciones, hasta puedes interpretar la presentación Star Trek o de Star War. Eso va en gustos, yo le hice la de Star Trek a mi Nokia 1100.
Bueno entonces... cual es tu duda?
Me imagino que cuando la alarma se activa, se ejecuta una función.
Por qué no simplemente ejecutar la función que hace sonar la melodía cuando la alarma está activa?
Lucario448:
Bueno entonces... cual es tu duda?
Me imagino que cuando la alarma se activa, se ejecuta una función.
Por qué no simplemente ejecutar la función que hace sonar la melodía cuando la alarma está activa?
Mira esta es la función de la alarma
Void fun_alarma(){
DateTime now = RTC.now();
//Si coinciden horas minutos y segundos, a su vez que alarma_on esta TRUE, activamos la alarma
if (hora_alarma == now.hour() && min_alarma == now.minute() && seg_alarma == now.second() && alarma_on == 1){
ok_alarma = true; //Alarma encendida
temp_out = millis();
lcd.backlight(); //Encendemos la luz
back = true;
digitalWrite(pin_alarma, HIGH); //Activamos pin de alarma
off_alarma = millis();
}
if (off_alarma+120000 < millis() && ok_alarma == true){
ok_alarma = false; //Si lleva sonando la alarma mas de 2 minutos paramos automaticamente
digitalWrite(pin_alarma, LOW);
}
pulsador_bounce.update(); //Comprobamos si hemos pulsado el boton
if (pulsador_bounce.risingEdge()){ //Si hemos pulsado paramos la alarma
temp_out = millis();
lcd.backlight();
back = true;
ok_alarma = false;
digitalWrite(pin_alarma, LOW);
Entonces como decís vosotros, sería tal que así por ejemplo?
Void fun_alarma(){
DateTime now = RTC.now();
//Si coinciden horas minutos y segundos, a su vez que alarma_on esta TRUE, activamos la alarma
if (hora_alarma == now.hour() && min_alarma == now.minute() && seg_alarma == now.second() && alarma_on == 1){
ok_alarma = true; //Alarma encendida
temp_out = millis();
lcd.backlight(); //Encendemos la luz
back = true;
tone (speaker, 1000, 500); //Activamos pin de alarma
delay(1000);
off_alarma = millis();
}
if (off_alarma+120000 < millis() && ok_alarma == true){
ok_alarma = false; //Si lleva sonando la alarma mas de 2 minutos paramos automaticamente
digitalWrite(pin_alarma, LOW);
}
pulsador_bounce.update(); //Comprobamos si hemos pulsado el boton
if (pulsador_bounce.risingEdge()){ //Si hemos pulsado paramos la alarma
temp_out = millis();
lcd.backlight();
back = true;
ok_alarma = false;
digitalWrite(pin_alarma, LOW);
Entonces el pitido repetiría como un bucle, o le tengo que hacer un while o un for?