Library adds the functions for obtaining averages for analog values and setting min and max values to be considered in the averaging (To filter out any out of range values)

Committer:
masterkookus
Date:
Mon Oct 07 12:44:29 2019 +0000
Revision:
1:b645a3714368
Parent:
0:13ce3869e3dd
Added percent or value option

Who changed what in which revision?

UserRevisionLine numberNew contents of line
masterkookus 0:13ce3869e3dd 1 #include "analogAverager.h"
masterkookus 0:13ce3869e3dd 2
masterkookus 1:b645a3714368 3 analogAverager::analogAverager(float nominalVal, bool useMinLimit, bool minIsPercent, float minSetVal, bool useMaxLimit, bool maxIsPercent, float maxSetVal)
masterkookus 0:13ce3869e3dd 4 {
masterkookus 0:13ce3869e3dd 5 nomVal = nominalVal;
masterkookus 0:13ce3869e3dd 6 maxLim=useMinLimit;
masterkookus 0:13ce3869e3dd 7 minLim=useMaxLimit;
masterkookus 1:b645a3714368 8 if (minIsPercent)
masterkookus 1:b645a3714368 9 {
masterkookus 1:b645a3714368 10 minVal = nominalVal*minSetVal;
masterkookus 1:b645a3714368 11 }
masterkookus 1:b645a3714368 12 else
masterkookus 1:b645a3714368 13 {
masterkookus 1:b645a3714368 14 minVal = minSetVal;
masterkookus 1:b645a3714368 15 }
masterkookus 1:b645a3714368 16 if (maxIsPercent)
masterkookus 1:b645a3714368 17 {
masterkookus 1:b645a3714368 18 maxVal = nominalVal*maxSetVal;
masterkookus 1:b645a3714368 19 }
masterkookus 1:b645a3714368 20 else
masterkookus 1:b645a3714368 21 {
masterkookus 1:b645a3714368 22 maxVal = maxSetVal;
masterkookus 1:b645a3714368 23 }
masterkookus 0:13ce3869e3dd 24 sampleNum=0;
masterkookus 0:13ce3869e3dd 25 }
masterkookus 0:13ce3869e3dd 26
masterkookus 0:13ce3869e3dd 27 void analogAverager::putVal(float newval)
masterkookus 0:13ce3869e3dd 28 {
masterkookus 0:13ce3869e3dd 29 if (maxLim)
masterkookus 0:13ce3869e3dd 30 {
masterkookus 0:13ce3869e3dd 31 if (newval>maxVal)
masterkookus 0:13ce3869e3dd 32 {
masterkookus 0:13ce3869e3dd 33 return;
masterkookus 0:13ce3869e3dd 34 }
masterkookus 0:13ce3869e3dd 35 }
masterkookus 0:13ce3869e3dd 36 if (minLim)
masterkookus 0:13ce3869e3dd 37 {
masterkookus 0:13ce3869e3dd 38 if (newval<minVal)
masterkookus 0:13ce3869e3dd 39 {
masterkookus 0:13ce3869e3dd 40 return;
masterkookus 0:13ce3869e3dd 41 }
masterkookus 0:13ce3869e3dd 42 }
masterkookus 0:13ce3869e3dd 43
masterkookus 0:13ce3869e3dd 44 if (sampleNum>=10)
masterkookus 0:13ce3869e3dd 45 {
masterkookus 0:13ce3869e3dd 46 averageVals[1]=newval;
masterkookus 0:13ce3869e3dd 47 averageVals[0]=((averageVals[0]+averageVals[1])*0.5f);
masterkookus 0:13ce3869e3dd 48 }
masterkookus 0:13ce3869e3dd 49 else
masterkookus 0:13ce3869e3dd 50 {
masterkookus 0:13ce3869e3dd 51 sampleVals[sampleNum]=newval;
masterkookus 0:13ce3869e3dd 52 sampleNum++;
masterkookus 0:13ce3869e3dd 53 }
masterkookus 0:13ce3869e3dd 54 if (sampleNum==10)
masterkookus 0:13ce3869e3dd 55 {
masterkookus 0:13ce3869e3dd 56 averageVals[0]=(sampleVals[0]+sampleVals[1]+sampleVals[2]+sampleVals[3]+sampleVals[4]+sampleVals[5]+sampleVals[6]+sampleVals[7]+sampleVals[8]+sampleVals[9])*0.1f;
masterkookus 0:13ce3869e3dd 57 sampleNum++;
masterkookus 0:13ce3869e3dd 58 }
masterkookus 0:13ce3869e3dd 59 }
masterkookus 0:13ce3869e3dd 60
masterkookus 0:13ce3869e3dd 61 float analogAverager::getAvg(void)
masterkookus 0:13ce3869e3dd 62 {
masterkookus 0:13ce3869e3dd 63 return averageVals[0];
masterkookus 0:13ce3869e3dd 64 }
masterkookus 0:13ce3869e3dd 65
masterkookus 0:13ce3869e3dd 66 void analogAverager::resetNum(void)
masterkookus 0:13ce3869e3dd 67 {
masterkookus 0:13ce3869e3dd 68 sampleNum=0;
masterkookus 0:13ce3869e3dd 69 averageVals[0]=0;
masterkookus 0:13ce3869e3dd 70 averageVals[1]=0;
masterkookus 0:13ce3869e3dd 71 }
masterkookus 0:13ce3869e3dd 72