Clap-Clap

Buonasera a tutti, sto realizzando con arduino il classico clapper...insomma, un dispositivo che tramite la lettura di un microfono preamplificato sia capace (una volta "sentiti" i due battiti di mano) di accendere una luce...

Il problema è che non riesco a differenziare la lettura dei due battiti...non so che istruzioni usare e nello specifico come impiegarle...vi allego il codice...Ogni critica e/o consiglio saranno ben accetti!

int valori[50];
int somma;
int media;
int Treshold = 25;
int Room_Dimension = 25; 
int Number_Of_Clap = 0;
  int Load_On = 10;
  int First_Clap_Led = 12;
  int Second_Clap_Led = 11;

void setup() {
  pinMode(First_Clap_Led, OUTPUT);     
    pinMode(Second_Clap_Led, OUTPUT);  
      pinMode(Load_On, OUTPUT);  
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
 
  //così ti salvi 5 valori
  for(int i=0; i<50; i++){
    valori[i] = analogRead(A0);



  } 
  somma = 0; // devi essere sicuro che il primo valore sia zero, altrimenti poi sballa tutto

  // finito di acquisire, fai la somma di tutti i campioni
  for(int i=0; i<50; i++)
    somma = somma + valori[i];

  //ottenuta la somma puoi fare la media
  media = somma / 50;

  //il loop finisce e di seguito ricomincia
  //per questo è mecessario azzerare di volta in volta la variabile somma
  Serial.println("Media Rumore Ambientale");
  Serial.println(media);
  delay(1000);


}

// the loop routine runs over and over again forever:
void loop() {
  

  
  boolean FirstClap = false;
  boolean SecondClap = false;
  
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  Serial.println("Sensore");
  Serial.println(sensorValue);
  Serial.println("Sensore + Soglia");
  Serial.println(sensorValue + Treshold);
  if (sensorValue > Treshold + media + Room_Dimension)
  
  {    
        Serial.println("Primo Battito Rilevato!");
        digitalWrite(First_Clap_Led, HIGH); 
        delay(700);
        FirstClap = true;

  }

   
    if (sensorValue > Treshold + media + Room_Dimension && FirstClap == true)
  {
    
    Serial.println("Secondo Battito Rilevato!");
    digitalWrite(Second_Clap_Led, HIGH); 
    digitalWrite(Load_On, HIGH); 
    
    Number_Of_Clap = Number_Of_Clap + 1;
    delay(700);
    SecondClap = true;
    }

    
    
  
  if (Number_Of_Clap == 2)
  {
    digitalWrite(First_Clap_Led, LOW); 
    delay(150);
    digitalWrite(Second_Clap_Led, LOW);     
    delay(150);
    digitalWrite(Load_On, LOW); 
    delay(150);
        Number_Of_Clap = 0;
    delay(300);    
  }


  
 

 delay(300);        // delay in between reads for stability
  }

GRAZIE!!!

Se fai una rapida ricerca (credo nella sezione hardware) trovi una discussione su un congegno battimani con tanto d sketch, è una cosa proprio di qualche giorno fa, magari lì trovi una soluzione interessante.