Go Down

Topic: Clap-Clap (Read 579 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy