Es hat einen Grund, warum die meisten Sensoren zweimal klatschen erwarten. Ich will so ein Ding auch im Schlafzimmer haben um das Licht auszumachen, deswegen habe ich ein wenig am Oszi experimentiert. Mein Sensor (so eine Platine mit so einem Mikro). lässt sich mit dem Trimpot eigentlich ganz so einstellen, dass der Digitalpin bei Klatschen im Raum auslöst und sonst nicht andauernd.
Der Trick kommt dann durch das Doppelklatschen. Am Oszi kann man sehen, dass die zeitlichen Abstände beim schnellen wie beim langsamen Klatschen extrem reproduzierbar sind. False positives nimmt man raus, indem man die gewünschte Aktion nur auslöst, wenn genau zwei Ausschläge in diesem Abstand (+/- ein kleiner zweistelliger Millisekundenbereich) kommen. Mit schnellem und langsamem Klatschen kann man sogar zwei Aktionen steuern.
Pseudocode sähe dann etwa so aus:
Wenn Interrupt getriggert:
Wenn letztesKlatschen x+-dx Sekunden her:
Aktion 1 (vorsicht in der Interruptroutine. Am Besten hier nur eine Flag setzen und dann in der Loop abarbeiten)
sonst wenn letztesKlatschen y+-dy Sekunden her:
Aktion 2
sonst
letztesKlatschen = jetzt
Sollte das zu viele false positives geben, baut man noch eine Sperrzeit ein nach einem falschen Interval. Wenn also meinetwegen ein 300+-20ms Abstand erwartet wird, sperrt man erstmal 2-5 Sekunden, wenn ein anderer Abstand kommt. Die Sperrzeit kann neugestartet werden, wenn innerhalb der Sperrzeit ein Impuls kommt. Damit sollte man recht zuverlässig verhindern, dass eine zufällige Folge von Triggern das Signal trifft, selbst wenn die Abstände um den Triggerabstand liegen.