我正在使用PIC和接近传感器读取远离物体的距离(cm)。
结果存储在
中距离= Rf_Rx_Buff [6]。
基本上我没有使用那个结果,而是想要实现一个过滤器,它需要10个读数,将它们平均,只允许在Rf_Rx_Buff [6]中读出平均值。
有人可以指导我如何实现这一点。
答案 0 :(得分:1)
至少有3种方法:
读取10个值并返回平均值(简单)
unsigned Distance1(void) {
unsigned Average_Distance = 0;
for (int i=0; i<10; i++) {
Average_Distance += Rf_Rx_Buff[6];
}
Average_Distance = (Average_Distance + 5)/10; // +5 for rounding
return Average_Distance;
}
读一次,但返回最后10次读数的平均值:
unsigned Distance2(void) {
static unsigned Distance[10];
static unsigned Count = 0;
static unsigned Index = 0;
Distance[Index++] = Rf_Rx_Buff[6];
if (Index >= 10) {
Index = 0;
}
Count++;
if (Count > 10) {
Count = 10;
}
unsigned long Average_Distance = 0;
for (int i=0; i<10; i++) {
Average_Distance += Distance[i];
}
Average_Distance = (Average_Distance + Count/2)/Count;
return Average_Distance;
}
只读一次,但返回平均值(digital low pass filter):
unsigned Distance3(void) {
static unsigned long Sum = 0;
static int First = 1;
if (First) {
First = 0;
Sum = Rf_Rx_Buff[6] * 10;
} else {
Sum = Rf_Rx_Buff[6] + (Sum*9)/10;
}
return (Sum + 5)/10;
}
其他可能的简化和方法,
答案 1 :(得分:0)
你可以这样做:
1。)开发一个计算平均值的函数。
int calc_average(int *sensor_values, int number_sensor_values) {
int result = 0;
for(char i = 0; i < number_sensor_values; ++i) {
// calculate average
result += *sensor_values++...
....
}
....
return result;
}
2.)读取10个传感器数据并将数据存储在一个数组中(sensor_values
)。
3.。)调用calc_average
函数并传递sensor_values
数组以获得结果。