Go Down

Topic: Clap-Clap (Read 534 times) previous topic - next topic

fardox

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!


Code: [Select]

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 ritieni che la mia risposta ti abbia aiutato a risolvere il problema non esitare! ringraziami dandomi il Karma! ;)
_-_-_-_-_-_-_-_-_-_-_-

Michele Menniti

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.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Go Up