
#define SAMPLE_COUNT    16

#define div_rnd(x,y)    ((x + (x >> 1)) / y)


int moving_average( int val )
{
  static int samples[SAMPLE_COUNT] = { 0 };
  static char sample_no = 1;

  int aver = 0;
  char i;

  if( --sample_no == 0 )
    sample_no = SAMPLE_COUNT;

  for( i = SAMPLE_COUNT; i; i-- ){
    if( i == sample_no )
      samples[i-1] = val;
    aver += samples[i-1];
  }
  return div_rnd( aver, SAMPLE_COUNT );
}