过滤读数PIC

时间:2014-11-06 14:43:53

标签: c pic

我正在使用PIC和接近传感器读取远离物体的距离(cm)。

结果存储在

  

距离= Rf_Rx_Buff [6]。

基本上我没有使用那个结果,而是想要实现一个过滤器,它需要10个读数,将它们平均,只允许在Rf_Rx_Buff [6]中读出平均值。

有人可以指导我如何实现这一点。

2 个答案:

答案 0 :(得分:1)

至少有3种方法:

  1. 读取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;
    }
    
  2. 读一次,但返回最后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;
    }
    
  3. 只读一次,但返回平均值(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;
    }
    
  4. 其他可能的简化和方法,

答案 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数组以获得结果。