Reading/interpreting tach signals from treadmill (speed/incline)

  rpm = 60*(1000000/time);

Constants are treated as ints, unless you specify otherwise. 1000000 doesn't look like it will fit in an int, does it?

1000000UL, on the other hand, will easily fit in an unsigned long.

  time = (micros() - time_last);
  time_last = micros();

Why the hell are thse floats? Time is integral.