4MinFilter<memory>::MinFilter(bool ignoreSame) {
5 this->ignoreSame = ignoreSame;
7 // Initialize the minValues array to 0.0f
8 for (int i = 0; i < minMemory; i++) {
13template<size_t memory>
14void MinFilter<memory>::ShiftArray(uint8_t mem, float* arr) {
15 for (uint8_t i = 0; i < mem; i++) {
22template<size_t memory>
23float MinFilter<memory>::Filter(float value) {
26 if (currentAmount < memory) {
27 values[currentAmount++] = value;
29 ShiftArray(memory, values); // pop first
30 values[memory - 1] = value;
33 float currentMin = values[0]; // 1st element
34 for (uint8_t i = 1; i < currentAmount; i++) {
35 if (values[i] < currentMin) currentMin = values[i];
38 if (minValues[minMemory - 1] != currentMin) { // the current min is different than the first, shift back and add
39 ShiftArray(minMemory, minValues); // pop first
40 minValues[minMemory - 1] = currentMin;
41 } else if (!ignoreSame) {
42 ShiftArray(minMemory, minValues); // pop first
43 minValues[minMemory - 1] = currentMin;
46 for (uint8_t i = 0; i < minMemory; i++) {
47 avg = avg + minValues[i];
50 return avg / minMemory;