Read rate of change of signal

Here's a start:

int minimum ;
int maximum ;

unsigned long start_time ;

void read_rate ()
{
  start_time = millis () ;
  int value = read () ;
  minimum = maximum = value ;
  while (millis () - start_time < 500)
  {
    value = read () ;
   // now deal with maintaining minimum and maximum
   ..
  }
  ..
}