Sketch:far accendere un LED battendo le mani due volte tramite un sensore suono

Ciao, sto operando con un nuovo sensore che prima non conoscevo ovvero il sensore suono/voce. Ho cercato su internet e tramite questo sensore si riesce ad esempio a far accendere la luce battendo per un tot di volte le mani. Ho cercato su internet e ho trovato solo uno sketch riguardo questo progetto, solo che sinceramente non ci ho capito molto. Lo sketch è questo:


boolean clapDetected();
int detectClaps(int numClaps);
int TOTAL_CLAPS_TO_DETECT = 2;
int offset = 5;
int CLAP_TIME=5000;
int sensorValue = 0;
int toggleOutput = 1;
int SIZE = 3;
int buffer[3];
int loopIteration = 0;
int average = 0;
int total = 0;
const int inPin0 = A0;

int out = 7; // relè
int readyPin = 13; // Led del pin 13
int deactivated = 5; //Led RGB: rosso
int activated = 6; // Led RGB: verde

const int FINAL_DETECTED = 0, LOST_CONTINUITY = 1, CLAP_NOT_DETECTED = 2;

void setup() {

pinMode(out, OUTPUT);
pinMode(readyPin, OUTPUT);
pinMode(activated, OUTPUT);
pinMode(deactivated, OUTPUT);
}

void loop() {
initialize();
runDetector();
}

void initialize()
{
loopIteration = 0;
total = 0;
average =0;
digitalWrite(out, LOW);
for(int i = 0; i < SIZE; i++)
{
readMic();
buffer = sensorValue;

  • total = total + sensorValue;*

  • average = (total/(i+1));*

  • delay(50);*

  • }*

  • digitalWrite(readyPin, HIGH);*
    }
    void runDetector() {

  • while(true)*

  • {*

  • int clapState = detectClaps(TOTAL_CLAPS_TO_DETECT);*

  • if(clapState == FINAL_DETECTED || clapState == LOST_CONTINUITY)*

  • {*

  • indicateClap(0);*

  • }*

  • }*
    }
    int detectClaps(int numClaps)
    {

  • int clapNum = numClaps;*

  • if(clapNum == 0)*

  • {*
    _ toggleOutput *= -1;_

  • indicateClap(clapNum);*

  • return FINAL_DETECTED;*

  • }*

  • readMic();*

  • total = (total - buffer[loopIteration]) + sensorValue;*

  • average = (total/SIZE);*

  • buffer[loopIteration] = sensorValue;*

  • loopIteration = (loopIteration+1)%SIZE;*

  • if(clapDetected())*

  • {*

  • indicateClap(clapNum);*

  • delay(100);*

  • for(int i = 0; i < CLAP_TIME; i++)*

  • {*

  • int clapState = detectClaps(clapNum - 1); *

  • if(clapState == FINAL_DETECTED || clapState == LOST_CONTINUITY)*

  • {*

  • return clapState;*

  • }*

  • }*

  • return LOST_CONTINUITY;*

  • }*

  • return CLAP_NOT_DETECTED;*
    }
    void indicateClap(int clapNum)
    {

  • if(clapNum == 0)*

  • {*

  • if(toggleOutput == 1)*

  • {*

  • digitalWrite(out, HIGH);*

  • digitalWrite(activated, HIGH);*

  • digitalWrite(deactivated, LOW);*

  • }*

  • else*

  • {*

  • digitalWrite(out, LOW);*

  • digitalWrite(activated, LOW);*

  • digitalWrite(deactivated, HIGH);*

  • }*

  • }*

  • delay(110);*
    }
    boolean clapDetected()
    {

  • return sensorValue > average + offset;*

}
void readMic()
{

  • sensorValue = analogRead(inPin0); *

}
* ** *
Chi me lo sa spiegare come funziona questo sketch? Inoltre vorrei sapere cosa significa questo funzione: initialize()
Grazie in anticipo

Hai già aperto un topic qui con lo stesso argomento... inoltre il codice, come già ti è stato detto di la, devi inserirlo nel tag "Code"