Realizar un contador de un led activado por un sensor de sonido.

Buenas tardes. En primer lugar soy nuevo en esto por lo que si cometo algún error me disculpo con antelación.

Estoy realizando un dispositivo que al detectar un umbral de sonido se activa un led, y cuando el led se activa, quiero poner un contador que me registre el número de veces que se enciende. Si el contador registra un número x de veces, dentro de un tiempo determinado, que mande un mensaje de alerta al móvil.

La cosa es que no consigo que me cuente el número de veces que enciende el led. Por favor, me podéis echar una mano, darme norte. Os lo agradecería mucho, muchísimo.

A continuación pego el código que tengo desarrollado:

P.D: No sé si será la mejor manera, pero con la poca idea que tengo es lo único que se me ocurre.

int sensorS=2;//Entrada señal de sonido
int avisoSensorS=6;//Salida. Indicador SensorS ha detectado sonido.

int estadoAvisoSensor=0;//
int estadoSensorAnt=0;

unsigned long inicioS;//Tiempo desde activación sensor.
unsigned long inicioSA;//Tiempo desde condición para activación del led AvisoSensor.
long umbralTiempo=20000; //umbral de tiempo en el que deben darse el número de repeticiones.
long tiempoledEncendido=2000;//Tiempo que el led permanece encendido.
boolean activoLedS;//variable para controlar la activación del avisoSensor.

int contadorS=0;

void setup() {
pinMode(sensorS,INPUT);
pinMode (avisoSensorS, OUTPUT);
Serial.begin(9600);
}


void alertaPorSonido()
{
 
 while (digitalRead(sensorS)==0)
   {    }

 inicioS=millis();
//Serial.print(inicioS/1000);
 //Serial.println();

while (inicioS<umbralTiempo)
{

     if (digitalRead(sensorS)==1)
     {
       
       activoLedS=true;
     inicioSA=millis();
       digitalWrite(avisoSensorS, HIGH);
     }
       
     if (activoLedS)
     {
        if (millis()-inicioSA>tiempoledEncendido)
         {
            inicioSA=inicioS-millis();
            activoLedS=false;
            digitalWrite(avisoSensorS,LOW);  // apago led1          
         }
     }
  
     {
       contadorS=contadorS+1;

       Serial.print(contadorS);
       Serial.println();
     }


}
}

void loop() {
alertaPorSonido();
}

Moderador: Código editado con etiquetas

051618_Disp_Contador_Detector_so_Umbral.ino (1.19 KB)

No entendí bien lo que quieres realizar pero, a simple vista creo ver algunas fallas:

Este while que hace ?

while (digitalRead(sensorS)==0)
   {    }   // no hay nada dentro de las llaves por lo que no sirve para nada

Aqui tienes el contador dentro de unas llaves, ¿porque?

while (inicioS<umbralTiempo)
{

     if (digitalRead(sensorS)==1)
     {
       
       activoLedS=true;
     inicioSA=millis();
       digitalWrite(avisoSensorS, HIGH);
     }
       
     if (activoLedS)
     {
        if (millis()-inicioSA>tiempoledEncendido)
         {
            inicioSA=inicioS-millis();
            activoLedS=false;
            digitalWrite(avisoSensorS,LOW);  // apago led1          
         }
     }
  
     {                                      //ESTA LLAVE
       contadorS=contadorS+1;

       Serial.print(contadorS);
       Serial.println();
     }                                   //Y ESTA OTRA ¿QUIEN LAS INVITO?


}

Este While solo te funcionara una vez durante 20 segundos al encender el arduino y hasta que se desborde el millis() volvera a funcionar otros 20 segundos:

while (inicioS<umbralTiempo)  //ESTE*

Y como sugerencia para hacer un buen uso de memoria si tu sensor solo entrega 2 estados, usa boolean en lugar de enteros