Un LED commuta il suo stato se si hanno due suoni ciascuno seguito da una pausa; trovare il battito ottimale per tentativi.
Durante l’esecuzione dell’esercitazione precedente ti sarai reso conto che anche un rumore qualsiasi può creare una commutazione dello stato del LED non desiderata. Proviamo con un doppio battito di mani in un breve intervallo di tempo.
Nell’esempio che segue il LED commuta il suo stato se si hanno due suoni ciascuno seguito da una pausa; trovare il battito ottimale per tentativi.
#define tempo 100
#define attesa 100
int k;
long inizio;
void setup() {
pinMode(8,INPUT);
pinMode(13,OUTPUT);
Serial.begin(9600);
}
void loop() {
k=0;
if(digitalRead(8)){
Serial.println("PRIMO battito");
delay(attesa);
inizio=millis();
k=1;
while(millis()-inizio<200){ // se vi è un suono prima di 200 millisecondi azzera il contatore ed esci
if(digitalRead(8)){
Serial.println("Prima pausa non coerente");
k=0;
break;
}
}
if(k==1){ // se vi è stato il primo battito seguito dalla pausa, attendi il secondo battito
delay(attesa);
inizio=millis();
while(millis()-inizio<200){
if(digitalRead(8)){
Serial.println("SECONDO battito");
k=2;
break;
}
}
if(k==2){ // controlla che ci sia anche la seconda pausa, altrimenti azzera il contatore
delay(attesa);
inizio=millis();
while(millis()-inizio<200){
if(digitalRead(8)){
Serial.println("Manca SECONDA PAUSA");
k=0;
break;
}
}
if(k==2){
Serial.println();
Serial.println();
Serial.println();
Serial.println("Commutazione effettuata\n\n\n");
commuta();
}
}
}
}
}
void commuta(){
digitalWrite(13,!digitalRead(13));
delay(200);
}
Sitografia