Sonidos de Bomberos

Aca va

/* 
Tonos para bombero 
*/ 
#define INCENDIO 0
#define OTROS    1
#define ATENCION 2
#define SILENCIO 3

// se definen las constantes 
// se declaran las frec. 
int  incendio     = 100;
int  otros        = 45; 
int  atencion     = 300; 

//se declaran los pina cada tono 
const byte pulsador_incendio = 8; 
const byte pulsador_otros    = 7; 
const byte pulsador_atencion = 6; 
const byte Sirena            = 13;

// se define las notas a reproducir F:Hz 
int sonidos_todos [ ]   = {incendio, otros, atencion}; 
int pulsadores[ ]         = {pulsador_incendio, pulsador_otros, pulsador_atencion}; 
int pulsador_activado   = 0; 
int pulsador_actual;        //se delcara como variable local 
int pulsador;

bool pIncendio, pIncendioAnt;
bool ActivoAlarmaIncendio;
bool pOtros, pOtrosAnt;
bool ActivoAlarmaOtros;
bool pAtencion, pAtencionAnt;
bool ActivoAlarmaAtencion;

void setup() { 
    //se define los pin de entrada y salida 
    // todos los pulsadores deben tener una resistencia pull-down o sea. pulsador con un extremo a 5V
    // el otro extremo a una R de 10k y al pin correspondiente. El otro extremo de la R a GND

    pinMode(pulsador_incendio, INPUT);
    pinMode(pulsador_otros,    INPUT);
    pinMode(pulsador_atencion, INPUT);
}

void loop() { 

    //el bucle analiza el estado de los 3 pulsores 

    pIncendio = digitalRead(pulsador_incendio);
    if (pIncendio && !pIncendioAnt) {
        ActivoAlarmaIncendio = !ActivoAlarmaIncendio;
    }
    pIncendioAnt = pIncendio;

    pOtros = digitalRead(pulsador_otros);
    if (pOtros && !pOtrosAnt) {
        ActivoAlarmaOtros = !ActivoAlarmaOtros;
        pulsador_activado = OTROS;
    }
    pOtrosAnt = pOtros;

    pAtencion = digitalRead(pulsador_atencion);
    if (pAtencion && pAtencionAnt) {
        ActivoAlarmaAtencion = !ActivoAlarmaAtencion;
        pulsador_activado = ATENCION;
    }
    pAtencionAnt = pAtencion;

    if (ActivoAlarmaIncendio){
         tone(Sirena, sonidos_todos[INCENDIO]);  
        delay(150);
        noTone(Sirena);
        delay(150);                           // repetir si es el caso
    }

    if (ActivoAlarmaOtros) {
        tone(Sirena, sonidos_todos[OTROS]);
        delay(4000);
        noTone(Sirena);
    }

    if (ActivoAlarmaAtencion) {
        tone(Sirena, sonidos_todos[ATENCION]);
        delay(5000);
        tone(Sirena, sonidos_todos[OTROS]);
        delay(5000);                          // repetir si corresponde
    } 
}

A ver si tenemos algo que funciona

buchale!! sigue exactamente igual. Estaba leyendo y quizás usando la función millis () pueda ayudarme. Pero ud que opina?

Sigue igual que código? El mio no puede ser. Yo no jugué con esto, pero te lo dejo a vos para que lo hagas

void loop() {
        tone(Sirena, sonidos_todos[INCENDIO]); 
        delay(150);
        noTone(Sirena);
        delay(150);                             // repetir si es el caso
}

pon eso en un sketch y a ver si suena continuo. Todo depende de eso. Yo encontre que noTone(Sirena); es mas perjudicial que beneficioso.