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.
carguy
22
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++) {
carguy
24
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.