sensor de sonido , multiples led y encendido aleatorio

Hola desde argentina!!
Bueno después de mucho tutorial y google , nuevo en arduino, viejo en edad logre mediante prueba ,error llegar 90% de un código, funciona sin problemas eléctricos ,aunque realizado sin multiplexar ,ni unos shif register ,ni 555, solo leds ,resistencias y un sensor de sonido
ky_037 ,muy simple para ustedes ,pero bastante trabajo me dio, paso al codigo

int pin[] = {17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, A0, A1};
//int LED2[]={7,8,9,10,11};
//int LED3[]={12,13,14,16,17};
int LED4[] = {24, 26, 27, 28, 29, 30, 31, 32, 33, 34}; //led slave
int LED5[] = {35, 37, 38, 39, 40, 41, 42, 43, 44, 45}; //led slave
int LED6[] = {48, 49, 50, 51, 52, 53, 21, 20, 19, 18, 17, A0, A1}; //led slave
int cont = 1;
int cont1 = 1;
int cont2 = 1;
int mic = 1;
int i;
int son = 0;
int n = 0;
//arduino mega usando el total de las salidas digital y analogicas ,un sensor de sonido ky_037 y 69 led
void setup() {

  for (i = 0; i <= 40; i++) {
    pinMode(pin[i], OUTPUT);
    digitalWrite(pin[i], HIGH);
  }
  pinMode(mic, INPUT);
  randomSeed(analogRead(0));// funcion aleatoria  para los leds esclavos
}
void efec_1() { // funciona ok.led patron encendido ,el microfono detecta un sonido led patron apago y se enciende aleatoriamente uno leds esclavo con un delay y apaga
  int cont1 = 1; // obliga al led esclavo a no volver a encender
  if (cont <= 1) { //obliga al led patron a no volver a encender
    digitalWrite(47, LOW); //led patron efec_1
    digitalWrite(36, LOW); //  led patron efec_2
    digitalWrite(25, LOW); // led patron_efec_   //faltan efec_4  y 5  con igual funcion

    for (n = 0; n <= 12; n++) {
      n = random(0, 12); // sorteo aleatorio led esclavo
      son = digitalRead(mic);
      if (son == HIGH) {
        while (digitalRead(mic) == HIGH & digitalRead(47), LOW); // leo pin microfono

        digitalWrite(47, HIGH); // se apaga led patron
        cont = cont + 1;      // este cont obliga a volver a encender el patron
        if (cont1 <= 1) {
          digitalWrite(LED6[n], LOW); //enciende led aleatorio esclavo
          delay(1200);
          digitalWrite(LED6[n], HIGH);
        }
        else
          digitalWrite(LED6[n], HIGH); //apaga led  esclavo
        cont1 = cont1 + 1; //
        return;
      }
    }
  }
}
void efec_2() { // igual que efec;1 pero apagando el patron led 2
  int cont3 = 1;
  if (cont1 <= 1) {
    digitalWrite(36, LOW);
    digitalWrite(47, HIGH);
    digitalWrite(25, LOW);
    for (n = 0; n <= 9; n++) {
      n = random(0, 9);
      son = digitalRead(mic);
      if (son == HIGH) {
        while (digitalRead(mic) == HIGH & digitalRead(36), LOW);

        digitalWrite(36, HIGH); //apago la caja
        cont1 = cont1 + 1; //apago la caja
        if (cont3 <= 1) { //apago la helice
          digitalWrite(LED5[n], LOW);
          delay(1200);
          digitalWrite(LED5[n], HIGH);

        }
        else
          digitalWrite(LED5[n], HIGH);
        cont3 = cont3 + 1; //
        return;
      }
    }
  }
}
void  efec_3() { //igual que los efec_1 y 2 apagandose el led patron 3
  int cont4 = 1;
  if (cont2 <= 1) {
    digitalWrite(25, LOW);
    digitalWrite(47, HIGH);
    digitalWrite(36, HIGH);
    for (n = 0; n <= 9; n++) {
      n = random(0, 9);
      son = digitalRead(mic);
      if (son == HIGH) {
        while (digitalRead(mic) == HIGH & digitalRead(25), LOW);

        digitalWrite(25, HIGH); //apago la caja
        cont2 = cont2 + 1; //apago la caja
        if (cont4 <= 1) { //apago la helice
          digitalWrite(LED4[n], LOW);
          delay(1200);
          digitalWrite(LED4[n], HIGH);

        }
        else
          digitalWrite(LED4[n], HIGH);
        cont4 = cont4 + 1; //apagp la helice
        return;
      }
    }
  }
}
//resumen funciona ok porque comienza con 3 led encendidos (faltan dos efec_) apagandolo el led patron y encendiendo el esclavo
// sin repetir el efec
void primero() { //

  efec_1();
  efec_2();
  efec_3();
  //efec_4//
  //efec_5//
}
void egundo() { // aca ya no funciona ,porque busco que sea aleatorio el efect
  //t
  // efec_5
  efec_2();
  efec_1();
  //efec_3();
  //efec_4();
}
void loop() {
  primero();
  egundo();
}

Simulacro cancha tiro escopeta:
tirador en pedana frente a 5 maquinas al pedir una cualquiera se activa (enciende o apaga) un foco (led patron) con en fin de dirigir la escopeta y sale objetivo (led esclavo) una vez disparada la maquina no vuelve a cargarse, el tirador pide tres veses
el tirador siguiente recive otro sorteo de tres diferentes

Yo no entiendo cual es el problema porque no queda claro cual es.

gracias por responder ,el problema es en el loop, efect 1,efect2 ,efect3 efec4 y 5 se realizan perfectamente, ahora al llegar al ultimo efecto no vuelve a reiniciar ,con otro secuencia diferente ..ejenplo efect4 ,efec2 efec1 efet5 y 3 y asi otro diferente, el problema esta creo yo en el (cont<1); de cada efecto al llegar al final de cada void no lo dejo volver ,viendo tutoriales mire uno que accionaba con 1,2 ,3 aplausos contaba la cantidad de aplausos y encendía o apagaba creo que eso seria lo correcto?????

Quieres aparender a resolverlo por tu cuenta o quieres que te sugiramos una solución?

Si la respuesta fuera la primera te aconsejo que hagas lo siguiente:
En cada efect y a medida que los contador se incrementan coloca un

Serial.println("cont =" + String(cont));

Este comando resume en una linea dos que habitualmente usaríamos y es cómodo, al menos para mi.
Sino solo pones

Serial.print("cont =");
Serial.println(cont);

y es lo mismo.

Bien, mucho cuidado con algo que observo en tus funciones efect.
Defines variables locales de contadores... que se inicializan obviamente tal como tu lo indicaste y no he visto si hay o no interacción en otros momentos asi que por eso te pido que veas la situacion parcial de cada contador y entonces iras viendo si se comportan como lo esperabas.

gracias por este consejo,pruebo tu codigo de manera individual ,me enfoco en un efecto solo ya que son todos iguales ,busco lograr que cada void sea independiente sin interferir al resto,y poderlos alternar .,de la manera que esta en el codigo funciona asi arranco con 5 led rojos encendidos emito un sonido ,apaga el primero y otro enciende aleatoria mente con un delay en ese sector ,,luego salta a otro sector ase lo mismo ,y otro igual y asi los 5 ,no se vuelven a repetir si no lo reseteo ,ni los puedo intercalar, de esta manera yo se que sector activa y no es lo que quiero

Bueno es una manera simple de saber que esta pasando con nuestros programas.
COmo dijie ten mucho cuidado con las variables locales y globales.. pueden jugarte una mala pasada.