From 964011e832e8ee9c971efd5da8f011f76885ff27 Mon Sep 17 00:00:00 2001 From: Martin Kompf Date: Sun, 10 Feb 2019 17:00:06 +0100 Subject: [PATCH] Simplified low pass filter --- arduino_sketch/ReflectorLightBarrier.ino | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/arduino_sketch/ReflectorLightBarrier.ino b/arduino_sketch/ReflectorLightBarrier.ino index 65356a8..334c24a 100644 --- a/arduino_sketch/ReflectorLightBarrier.ino +++ b/arduino_sketch/ReflectorLightBarrier.ino @@ -33,10 +33,9 @@ int sensorValue = 0; // difference sensorValueOn - sensorValueOff float filteredValue; // filtered sensor value // definitions for low pass filter -#define FILTER_LEN 6 -float buffer[FILTER_LEN]; -int startBuf = 0; -int lenBuf = 0; +float filterAlpha = 0.1f; +float filterOut = 0; +boolean filterLoad = true; // command line #define MAX_CMD_LEN 80 @@ -175,20 +174,15 @@ void doCommand() { * Low pass filter to eleminate spikes */ float lowpass(int value) { - if (lenBuf < FILTER_LEN) { - lenBuf++; + if (filterLoad) { + filterOut = value; + filterLoad = false; } - buffer[startBuf++] = (float) value; - if (startBuf >= FILTER_LEN) { - startBuf = 0; - } - float sum = 0; - for (int i = 0; i < lenBuf; ++i) { - sum += buffer[i]; - } - return sum / lenBuf; + filterOut = filterAlpha * value + (1.f - filterAlpha) * filterOut; + return filterOut; } + /** * Setup. */