// ---------------------------------------------------------------------------
// (| " Sirena_buzzer.ino "|)
// (| " Este es un sencillo ejemplo de Sirena de policía y ambulancia con "|)
// (| " luces de emergencia incorporadas y un buzzer pasivo. Se utilizara "|)
// (| " un resistor de 220Ω para limitar la corriente consumidad por el "|)
// (| " buzzer y se activara el resistor de pull-up interno de Arduino para"|)
// (| " mantener el pin D12 en alto y leer asi un bajo cuando sea accionado"|)
// (| " el pulsador. "|)
// (| " "|)
// (| " Un Buzzer es un zumbador piezoelectrico. "|)
// (| " "|)
// (| " Un pin del pulsador va al pin 12 del Arduino UNO Rev3 / NANO y el "|)
// (| " otro extremo va a GND. "|)
// (| " "|)
// (| " El pin positivo o signal del buzzer va al pin 10 del Arduino UNO "|)
// (| " Rev3/NANO mediante un resistor de 220Ω y el otro extremo va a GND."|)
// (| " "|)
// (| " Este código de ejemplo es de dominio público. "|)
// (| " "|)
// (| " Maker/Developer: jorgechac© - Técnico Laboral en Programación UNAB "|)
// (| " Visita https://jorgechac.blogspot.com/ "|)
// (| " "|)
// (| " Venta de accesorios Arduino/Raspberry Pi Pico/ESP32 "|)
// (| " Whatsapp y Ventas NEQUI +573177295861 "|)
// (| " Bucaramanga - Colombia "|)
// (| " "|)
// (| " Simulación https://wokwi.com/projects/341312959649153618 "|)
// (| " Descarga gratis este sketch en: "|)
// (| " https://create.arduino.cc/editor/jorgechac/bd9bc4ac-8d87-455b-b311-1d22b182d418/preview "|)
// ------------------------------------------------------------------------------------------------
// Configuracion de pines
int boton = 12; // Pin 12 de Arduino para leer el botón "iniciar melodia"
int sonido = 10; // Pin 10 de Arduino para el generador de sonido, el + (signal) del buzzer
// Variables para el control del tiempo
unsigned long tiempoAnterior = 0; // Almacena el tiempo anterior
unsigned long duracionTono = 10; // Duración de los tonos en milisegundos
// Configuración inicial
void setup() {
pinMode(boton, INPUT_PULLUP); // Configura el pin para el botón como entrada y habilita resistencia pull-up interna
pinMode(sonido, OUTPUT); // Configura el pin de sonido como salida para control del buzzer
}
// Bucle principal
void loop() {
if (digitalRead(boton) == LOW) { // Comprueba si el botón está presionado (nivel bajo)
sirenaPolicia(1200, 800, 1, 400, 2); // Llama a la función para simular una sirena de policía
sirenaPolicia(1100, 700, 20, 20, 10); // Llama a la función nuevamente
sirena2(); // Llama a otra función para reproducir otro patrón de sonido
noTone(sonido); // Detiene cualquier tono que se esté reproduciendo en el pin de sonido
}
}
// Función para simular una sirena de policía, se utiliza un bucle for para
// variar la frecuencia de los tonos y crear el efecto de sirena
void sirenaPolicia(int fMAX, int fMIN, int divisor, int numMAX, int repet) {
int fMIN1 = fMIN;
int fMAX1 = fMAX;
for (int i = 0; i < repet; i++) {
for (int j = 0; j <= numMAX; j++) {
tone(sonido, fMIN1); // Genera un tono en el pin de sonido con frecuencia fMIN1
while (millis() - tiempoAnterior < duracionTono) {
// Espera durante la duración del tono
}
tiempoAnterior = millis(); // Actualiza el tiempo anterior
fMIN1 = fMIN1 + divisor; // Aumenta la frecuencia para cambiar el tono
}
for (int k = numMAX / 2; k >= 0; k--) {
tone(sonido, fMAX1); // Genera un tono en el pin de sonido con frecuencia fMAX1
while (millis() - tiempoAnterior < duracionTono) {
// Espera durante la duración del tono
}
tiempoAnterior = millis(); // Actualiza el tiempo anterior
fMAX1 = fMAX1 - divisor * 2; // Disminuye la frecuencia para cambiar el tono
}
fMIN1 = fMIN; // Restablece la frecuencia mínima
fMAX1 = fMAX; // Restablece la frecuencia máxima
}
}
// Función sirena2() para reproducir un patrón de sonido, esta función genera
// tonos de 1200 Hz y 800 Hz alternadamente, con pausas entre ellos
void sirena2() {
for (int l = 0; l <= 4; l++) {
tone(sonido, 1200); // Genera un tono de 1200 Hz en el pin de sonido
while (millis() - tiempoAnterior < 500) {
// Espera durante 500 milisegundos
}
tiempoAnterior = millis(); // Actualiza el tiempo anterior
tone(sonido, 800); // Genera un tono de 800 Hz en el pin de sonido
while (millis() - tiempoAnterior < 500) {
// Espera durante 500 milisegundos
}
tiempoAnterior = millis(); // Actualiza el tiempo anterior
// Agrega un tiempo de espera entre tonos
while (millis() - tiempoAnterior < 100) {
// Espera durante 100 milisegundos
}
tiempoAnterior = millis(); // Actualiza el tiempo anterior
}
}
// --------------------------------------------------------------------------
/* esta parte del codigo esta comentada para que en el fututuro mientras
reproduce el sonido y se manejan las temporizaciones con la funcion millis,
se iluminen los led de emergencia rojos y azules.
Si desea probar solo esta función comente todo el programa anterior
y deje solo esta parte que comienza con /* y termina con * slash
int boton = 12; //Pin 12 de arduino para leer el boton "iniciar melodia"
int tiempo = 10;
int sonido = 10; //Pin 10 de arduino para el + (signal) del zumbador
void setup() {
pinMode(boton, INPUT_PULLUP); // Pulsador para accionar la alarma
pinMode(sonido, OUTPUT); // Pin para reproducir la frecuencia del tono
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
for (int i = 0; i < 7; i++)
{ digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
delay(100);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
delay(100);
}
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
//Segunda parte
for (int i = 0; i < 5; i++)
{
for (int b = 0; b < 5; b++)
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
delay(50);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
delay(50);
}
for (int b = 0; b < 5; b++)
{
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
delay(50);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
delay(50);
}
}
} */