From 68bf4f4f5dbc3ed6d46072c5d6d8bfb4e3121249 Mon Sep 17 00:00:00 2001 From: Lucian Sabo Date: Mon, 8 Jul 2019 11:56:00 +0300 Subject: [PATCH] fixed running average --- GP2YDustSensor.cpp | 18 ++++++++++++------ GP2YDustSensor.h | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/GP2YDustSensor.cpp b/GP2YDustSensor.cpp index d001384..92f5daa 100644 --- a/GP2YDustSensor.cpp +++ b/GP2YDustSensor.cpp @@ -19,6 +19,7 @@ GP2YDustSensor::GP2YDustSensor(GP2YDustSensorType type, this->analogReadPin = analogReadPin; this->type = type; this->sensitivity = 0.5; // default sensitivity from datasheet + this->nextRunningAverageCounter = 0; switch (type) { case GP2Y1010AU0F: @@ -37,7 +38,7 @@ GP2YDustSensor::GP2YDustSensor(GP2YDustSensorType type, this->runningAverageCount = runningAverageCount; if (this->runningAverageCount) { - this->runningAverageBuffer = new int[this->runningAverageCount]; + this->runningAverageBuffer = new int16_t[this->runningAverageCount]; // init with -1 for (uint16_t i = 0; i < this->runningAverageCount; i++) { this->runningAverageBuffer[i] = -1; @@ -176,16 +177,20 @@ uint16_t GP2YDustSensor::getRunningAverage() } float runningAverage = 0; - uint16_t availRunningAverageSampleCount = 0; + uint16_t sampleCount = 0; for (uint16_t i = 0; i < this->runningAverageCount; i++) { if (this->runningAverageBuffer[i] != -1) { runningAverage += this->runningAverageBuffer[i]; - availRunningAverageSampleCount++; + sampleCount++; } } + + if (sampleCount == 0) { + return 0; + } - runningAverage /= availRunningAverageSampleCount; + runningAverage /= sampleCount; return round(runningAverage); } @@ -210,9 +215,10 @@ GP2YDustSensor::~GP2YDustSensor() void GP2YDustSensor::updateRunningAverage(uint16_t value) { + this->runningAverageBuffer[this->nextRunningAverageCounter] = value; + this->nextRunningAverageCounter++; - if (this->nextRunningAverageCounter > this->runningAverageCount) { + if (this->nextRunningAverageCounter >= this->runningAverageCount) { this->nextRunningAverageCounter = 0; } - this->runningAverageBuffer[this->nextRunningAverageCounter] = value; } diff --git a/GP2YDustSensor.h b/GP2YDustSensor.h index 78f4800..76de560 100644 --- a/GP2YDustSensor.h +++ b/GP2YDustSensor.h @@ -16,7 +16,7 @@ class GP2YDustSensor float zeroDustVoltage; float calibrationFactor; float sensitivity; - int *runningAverageBuffer; + int16_t *runningAverageBuffer; int runningAverageCount; int nextRunningAverageCounter; int runningAverageCounter;