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