Унапређење #2
Рутине за приказ разних просека.
Позадина
Раније сам писао око прецизности мерења, тачније како сам имплементирао покушај за увећавање те прецизности уз помоћ више од једног окидача. Такође, утврдио сам да лимит прецизности није у интерним функцијама Ардуина, већ око процеса на превод аналогног сигнала у дигитални (тачније брзина окидања сензора која може да зависи и од сензора, и од окидача).
Комбинација ових узрока скоро увек даје резултате кои флуктуирају, чак и са веома (*) стабилним погоном.
(*) Не бих рекао најстабилнији погон, зато што нисам имао могућности тестирати са погоном који је стабилнији од мог, а сигуран сам да постоји.
Како изгледа примерак од, рецимо, 8 окидања сензора:
RPM (true)
33.3339
33.3325
33.3291
33.3313
33.3316
33.3336
33.3344
33.3341
Флуктуација почиње у трећој децимали, у 7 од 8 приказаних случаја. То би требало да буде довољно, али да видимо дали може боље за приказ.
Код
Сва логика око калкулација просека се налази у процедури:
showRPM();
А регулира се уз помоћ пар променљива:
boolean averageCalc = true;
const int averageTotal = 16;
Прва променљива утврђује да ли се калкулација просека уопште врши. Друга променљива утврђује колико од задњих вредности улази у просек.
Процедура је релативно једноставна:
При сваком окидању, тренутна вредност се додаје пољу averageValues;
Показивач averageCount се повећа за вредност 1;
Након првих averageTotal циклуса, averageCount се ресетује, а просек се почиње калкулирати - увек од задњих averageTotal вредности;
У случају промене брзине (33.3 према 45 и обратно) све просечне вредности се ресетирају, и почињу се калкулирати тек након 2 * averageTotal циклуса. (**)
(**) Разлог иза овог приступа је намера да се избегне приказ "застарелих" вредности просека и тиме добити утисак погрешне брзине. Свакако, просеци се изједначују након пар циклуса, али овако је приказ линеарнији.
Резултати
Кад се ова функција примени на вредности које сам раније поставио, добија се ово:
PRM (true) RPM (average)
33.3339 33.3346
33.3325 33.3348
33.3291 33.3346
33.3313 33.3346
33.3316 33.3346
33.3336 33.3347
33.3344 33.3347
33.3341 33.3346
Наизглед није пуно, али је излаз пуно линеарнији, и чини ми се, пријатнији за око и умањење аудиофилске нервозе.
Закључак
За моје потребе, веома корисно. Чини ми се да би било користи од више штимања, али основна функционалност је ту.
Код је, као и увек (c2efaba4), овде:
https://github.com/stojnev/dwr-controller