analogRead() and timers and interrupts issues

int kphLookup_ERAsensor[250] 
if (kphTimestampDifference_average >= kphLookup_ERAsensor[0] && kphTimestampDifference_average <= kphLookup_ERAsensor[249]){
    for (i = 0; i <= 249; i++) {

      if ( kphTimestampDifference_average > kphLookup_ERAsensor[i] && kphTimestampDifference_average <= kphLookup_ERAsensor[i + 1]) {

        kphSpeed = 250 - i; //or possably kphSpeed = 250 - i to use the lower bound
      }
    }
}
else kphSpeed = 0;

When i = 249, kphLookup_ERAsensor[i + 1] is still accessing element[250] which is out of bounds and could be any random value.

I think I see what you mean.

I'm going to have to figure out how to fix that tomorrow.

Unless you have an idea...

for (i = 0; i < 249; i++) {

ok I have amended the speed sensor lookup table to include a number at the end, above the desired value range:

int kphLookup_ERAsensor[251] = {

   
// [...]

// here be values for kphLookup_ERAsensor[] 

// [...]

  7710, 8325, 9033, 9857, 10824, 11971, 13345, 15006, 17025, 19454,
  20000

};

And the lookup routine is now as follows:

if (kphTimestampDifference_average >= kphLookup_ERAsensor[0] && kphTimestampDifference_average <= kphLookup_ERAsensor[249]) {

      for (i = 0; i <= 249; i++) {

        if ( kphTimestampDifference_average >= kphLookup_ERAsensor[i] && kphTimestampDifference_average <= kphLookup_ERAsensor[i + 1]) {

          kphSpeed = 250 - i;
        }
      }
    }
    else {

      if (kphTimestampDifference_average > kphLookup_ERAsensor[249]) kphSpeed = 0;
      if (kphTimestampDifference_average < kphLookup_ERAsensor[0]) kphSpeed = 250;
    }

Although it probably won't matter in everyday use, that way, speeds of 1 kph can be recorded as well.