現在、次の関数を使用して、それぞれ発生している温度測定値の移動平均を計算しています200ms
。
uint16_t ntc_average(uint16_t adcdata)
{
static uint8_t first = 1;
static uint16_t t1,t2,t3,t4,t5;
if(first == 1)
{
first = 0;
t1 = t2 = t3 = t4 = t5 = adcdata;
}
t5 = t4;
t4 = t3;
t3 = t2;
t2 = t1;
t1 = adcdata;
adcdata = (t1+t2+t3+t4+t5)/5;
return(adcdata);
}
ただし、5 ポイントでは十分ではなく、さらに滑らかにするには、はるかに長いバッファーが必要になる場合があります。たとえば、10 ~ 20 の読み取りごとに 1 回または 2 回、値が 1 ポイント上下する可能性があり、それを滑らかにする必要があります。tn 変数を増やすのは見苦しく思えます... t1-t50 が必要かもしれません。
C
温度測定値を平滑化するために使用できる別の機能を提案できる人はいますか? 値は符号なし整数であり、float ではないことに注意してください。