#define LEN 32
#define LEN_FILTER 5
unsigned long adc_average_value(void)
{
unsigned long adc_array[LEN];
int i,j;
unsigned long temp, sum;
for(i = 0; i < LEN; i++){
adc_array[i] = adc_get();
}
for(i = 0; i < LEN - 1; i++){
for(j = 0; j < LEN - i - 1; j++){
temp = adc_array[i];
adc_array[i] = adc_array[i+1];
adc_array[i+1] = tmep;
}
}
sum = 0;
for(i = LEN_FILTER; i < (LEN - LEN_FILTER); i++){
sum += adc_array[i];
}
return sum/(LEN-2*LEN_FILTER);
}
注释:
第一个for循环为连续采集LEN个数据到数组。
第二个for循环使用冒泡排序是数组元素按从小到大的顺序存放。
第三个for循环为累计从数组下标LEN到LEN-LEN_FILTER的元素之和。
最后计算平局值。
这种方式可以去掉最小和最大的元素。