Hola a todos:
Esta vez les molesto pues estoy tratando de hacer un ejercicio orientado en el cual debo realizar una alarma muy rudimentaria pero que resulta muy ùtil en estos mis primeros pasos con Arduino.
La alarma consiste en controlar un interruptor magnètico o reed switch, conectado al pin D4 de Arduino, que al abrirse la puerta o la ventana debe disparar una alarma, encendiendo dos leds rojos y dos leds amarillos alternativamente.
Simultàneamente, Y AQUI ES DONDE ESTA EL PROBLEMA, un buzzer o zubador conectado el pin D11, debe sonar.
Y digo que este es el problema pues lo hace todo, solo que no simultaneamente. Es decir primero encienden los leds y luego suena la alarma.
En el ejerciciono exigen nada al respecto, pero creo que no me deberìa conformar y busar, con vuestra ayuda claro, la forma de que la alarma suene mientras estèn parpadeando los leds.
Les dejo el còdigo, que sè no es perfecto, pero hasta aquì lo hace todo, la verdad, solo que no lo hace simultàneamente.
Quizàs alguno me pueda dar una sugerencia de dònde sea mejor colocar la secuencia que hace sonar el buzzer dentro del còdigo.
Desde ya muchas gracias y buen trabajo!!!!
/*---------------------------------------------------
PRACRICA 10, EJERCICIO 1: INTERRUPTOR MAGNETICO - LADRONES EN CASA!!!
--------------------------------------------------
Programa que genera una alarma visual con dos leds rojos
y dos leds amarillos, conectados a los pines d2 y d3 respectivamente.
Tambièn tendrà una Alarma sonora con un buzzer en pin d11.
Se activa la alarma con un codigo de 4 dìgitos por el serial
mostrando en pantalla "Alarma Activada", cuando detecta la intrusiòn
(reed switch) y està activada realiza el parpadeo y la sirena, mostrado por pantalla
"Sistema disparado", hasta que por el serial llega el còdigo de 4 dìgitos para desactivar
mostrando en pantalla "Alarma Desactivada"
ejemplo: escribe 1111 por el monitor serial, significa activar alarma
escribe 0000 por el monitor serial, significa descativar alarma
rev.2-> tratar de introdcir la parte de la alarma sonora con un buzzer en el pin 11, que
se debe activar durante todo el tiempo que estè "disparado el sistema"
*/
//-----------------------------------------------------
//Declarar puertos de entrada y salida, variables, etc.
//-----------------------------------------------------
int contacto = 4; // declaro el pin d4 asociado al reed switch
int ledRojo = 2; // declaro el pin d2, donde estaràn los leds rojos
int ledAmarillo = 3; // declaro el pin d3, donde estaràan los led amarillos
int buzzer = 11; // pin donde està conectado el buzzer a traves de 220ohm
int frecuencia1 = 400; // aquì declaro el valor de la frecuencia 1 a utilizar
int frecuencia2 = 700; // aquì declaro el valor de la frecuencia 2 a utilizar
boolean AlarmActiva = false; // declaro una bandera que serà verdadera cuando el user active la alarma
boolean intruso = false; // declaro una bandera para la toma de decisiones mas tarde
String leer; // declaro una cadena de caracteres para almacenar el còdigo act o desact
//------------------------------------
//Funciòn principal o de configuraciòn
//------------------------------------
void setup()
{
pinMode(contacto, INPUT); // declaro el pin d4, donde està el reed switch, como entrada
pinMode(ledRojo, OUTPUT); // declaro el pin d2, donde està el led Rojo como salida
pinMode(ledAmarillo, OUTPUT);// declaro el pin d3, donde està el led Amarillo como salida
// pinMode (buzzer, OUTPUT); // se puede omitir en este caso pues el pin 11 ya viene para PWM
Serial.begin(9600); // inicializo la comunicaciòn serial a 9600 baudios
}
//--------------------
//Funciòn cìclica
//--------------------
void loop()
{
if (Serial.available() > 0); // veo si llega algùn dato por el monitor serial
{
leer = Serial.readStringUntil('\r'); // leo lo q hay hasta el return
Serial.println(leer); // lo escribo para verlo en la pantalla
if (leer == "1111" && !AlarmActiva) //pregunto si era el cod. para encender y que la alarma
//no estuviera ya activada
{
AlarmActiva = true; // cambio la bandera
intruso = false; // cambio bandera, alarma activa, no intruso
Serial.println ("Alarma Activada!!!"); // muestro por el serial q la alarma ha sido activada
}
else if (leer == "0000" && AlarmActiva) // si era 0000 y era activa, desactivo todo
{
Serial.println(leer); // lo escribo para verlo en la pantalla
AlarmActiva = false; // pongo la bandera descativada
intruso = false; // reseteo intruso
Serial.println ("Alarma Desactivada"); // muestro por el serial q la alarma ha sido Desactivada
}
else if (digitalRead(contacto) == LOW && AlarmActiva) // pregunto si el pin 2 se puso a 0v, por acercar el imàn
// y que sea Activa la Alarma
{
intruso = true; // se ha detectado un Intruso
Serial.println("Sistema violado...INTRUSO...!!!");
while (intruso == true && AlarmActiva) // mientras haya intruso y no se apague la alarma, parpadean leds
// y suena la alarma
{
for (int i=0;i<=6;i++)
{
digitalWrite(ledRojo, HIGH); // parpadea led rojo 6 veces
delay(20);
digitalWrite(ledRojo, LOW);
delay(20);
}
for (int i=0;i<=7;i++)
{
digitalWrite(ledAmarillo, HIGH); // parpadea led amarillo 6 veces
delay(20);
digitalWrite(ledAmarillo, LOW);
delay(20);
}
//-------------------------------------------------------------------------------
// ESTA ES LA PARTE DEL CODIGO QUE NO SE DONDE UBICAR
tone(buzzer, frecuencia1); // emite sonido a la frecuencia 1
delay (1000); // suena por un segundo
tone(buzzer, frecuencia2);// emite sonido a la frecuencia 2
delay (1000); // suena por un segundo
noTone(buzzer); // apago el buzzer
// HASTA AQUI LA PARTE QUE NO SE DONDE UBICAR DENTRO DEL CODIGO DE MANERA QUE LA
// ALARMA SUENE MIENTRAS PARPADEAN LOS LEDS
//-----------------------------------------------------------------------------
leer = Serial.readStringUntil('\r'); // vuelvo a leer lo q hay hasta el return
// para ver si el usuario descativò la alarma
if (leer == "0000") // pregunto si còdigo es el de desactivaciòn
{
AlarmActiva = false; //si el usuario apagò, cambio la bandera
intruso = false; // cambio la bandera
digitalWrite(ledRojo, LOW); // mantengo rojo apagado
digitalWrite(ledAmarillo, LOW); // mantengo amarillo apagado
Serial.println ("Alarma Desactivada"); // muestro por el serial q la alarma ha sido Desactivada
}
}
}
}
}
// Fin del programa