Skip to content

Commit

Permalink
fixed running average
Browse files Browse the repository at this point in the history
  • Loading branch information
luciansabo committed Jul 8, 2019
1 parent fb79138 commit 68bf4f4
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 7 deletions.
18 changes: 12 additions & 6 deletions GP2YDustSensor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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;
Expand Down Expand Up @@ -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);
}
Expand All @@ -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;
}
2 changes: 1 addition & 1 deletion GP2YDustSensor.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class GP2YDustSensor
float zeroDustVoltage;
float calibrationFactor;
float sensitivity;
int *runningAverageBuffer;
int16_t *runningAverageBuffer;
int runningAverageCount;
int nextRunningAverageCounter;
int runningAverageCounter;
Expand Down

0 comments on commit 68bf4f4

Please sign in to comment.