Pages: [1]   Go Down
Author Topic: Clap-Clap  (Read 442 times)
0 Members and 1 Guest are viewing this topic.
Italy
Offline Offline
Full Member
***
Karma: 0
Posts: 158
Arduino = Tecnologia
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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!!!
Logged

Se ritieni che la mia risposta ti abbia aiutato a risolvere il problema non esitare! ringraziami dandomi il Karma! smiley-wink
_-_-_-_-_-_-_-_-_-_-_-

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 518
Posts: 12321
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

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

Pages: [1]   Go Up
Jump to: