Решил потестировать оба варианта. И заметил в своем варианте такую “фичу”. Индекс выбирается непонятно как. Допустим если в массиве будет более одной группы с одинаковым вхождением ( ну т.е. число 555 было три раза, число 553 - три раза ну и еще какое ни будь тоже три раза) И вот по какому принципу он выбирает indRep?
Вот несколько выборок результата, стрелочкой указал выбранный indRep:
что-то как-то вставился текст непонятно… возможно из-за многотире
Спойлер
5118228
[218, 217, 218, 216, 217, 217, 215, 215, 217, 216, 214, 218, 218, 216, 214, 215, ]
[218, 217, 216, 215, 214, ]
218 = 4
217 = 4 <
216 = 3
215 = 3
214 = 2
indRep: 1
Num: 217
maxRep: 4
19256
5731732
[110, 110, 106, 109, 107, 106, 109, 106, 107, 108, 110, 110, 107, 108, 109, 106, ]
[110, 106, 109, 107, 108, ]
110 = 4 <
106 = 4
109 = 3
107 = 3
108 = 2
indRep: 0
Num: 110
maxRep: 4
13576
4909336
[216, 218, 215, 217, 214, 216, 215, 214, 214, 216, 216, 218, 214, 218, 218, 215, ]
[216, 218, 215, 217, 214, ]
216 = 4 <
218 = 4
215 = 3
217 = 1
214 = 4
indRep: 0
Num: 216
maxRep: 4
19256
1783060
[216, 218, 216, 217, 217, 216, 218, 215, 214, 217, 218, 216, 216, 217, 217, 214, ]
[216, 218, 217, 215, 214, ]
216 = 5 <
218 = 3
217 = 5
215 = 1
214 = 2
indRep: 0
Num: 216
maxRep: 5
19256
13052308
[107, 109, 106, 108, 107, 106, 109, 108, 109, 107, 110, 106, 110, 106, 107, 108, ]
[107, 109, 106, 108, 110, ]
107 = 4
109 = 3
106 = 4 <
108 = 3
110 = 2
indRep: 2
Num: 106
maxRep: 4
13668
17458540
[218, 214, 218, 217, 215, 216, 217, 216, 216, 218, 214, 215, 216, 218, 217, 215, ]
[218, 214, 217, 215, 216, ]
218 = 4
214 = 2
217 = 3
215 = 3
216 = 4 <
indRep: 4
Num: 216
maxRep: 4
19344
14531948
[214, 215, 218, 218, 214, 215, 215, 214, 218, 216, 217, 214, 218, 216, 217, 215, ]
[214, 215, 218, 216, 217, ]
214 = 4 <
215 = 4
218 = 4
216 = 2
217 = 2
indRep: 0
Num: 214
maxRep: 4
19348
13472148
[110, 109, 106, 107, 108, 109, 107, 108, 106, 108, 107, 110, 106, 110, 109, 107, ]
[110, 109, 106, 107, 108, ]
110 = 3
109 = 3
106 = 3
107 = 4 <
108 = 3
indRep: 3
Num: 107
maxRep: 4
13664
2591124
[108, 110, 107, 108, 110, 106, 108, 109, 106, 106, 109, 107, 110, 110, 109, 107, ]
[108, 110, 107, 106, 109, ]
108 = 3
110 = 4 <
107 = 3
106 = 3
109 = 3
indRep: 1
Num: 110
maxRep: 4
13576
Вот код:
Спойлер
void FilterRaw(byte _sens) {
uint16_t FilterArr[NUMREADSENS];
byte RepArr[NUMREADSENS];
unsigned long time = micros();
Serial.println("---------------");
Serial.println(time);
for (byte n = 0; n < NUMREADSENS; n++) {
FilterArr[n] = 0; RepArr[n] = 0;
}
byte maxRep = 0, indRep = 0;
for (byte n = 0; n < NUMREADSENS; n++) {
for (byte k = 0; k < NUMREADSENS; k++) {
if (FilterArr[k] == 0) {
FilterArr[k] = Sens[_sens].Raws[n];
++RepArr[k];
if (RepArr[k] > maxRep) {
indRep = k;
maxRep = RepArr[k];
}
break;
}
if (FilterArr[k] == Sens[_sens].Raws[n]) {
++RepArr[k];
if (RepArr[k] > maxRep) {
indRep = k;
maxRep = RepArr[k];
}
break;
}
}
}
И вот целиком
https://wokwi.com/projects/369782894463951873
Там ползунки нужно сразу сдвинуть куда ни будь в середину
Почему выбирается то первый из одинаковых, то последний… но вроде было и в серединке (но могу ошибаться)?
С Линейным вариантом, предложенным Евгением, пробовал. Но там столкнулся с тем, что когда разница между мин и макс большая, то начинаются “проблемы”. Но я решение нашел, но пока застопорился на своем же варианте(