float KalmanFilter::measureRSSI(float raw_rssi) {

p = p+q;

k = p/(p+r)*1.0;

x = x+k*(raw_rssi - x);

p = (1 - k)*p*1.0;

return x;

}

I don't understand why this filter multiplies by 1.0. That type extends from "float" to "double," but that immediately gets truncated back to "float" in the assignment. Maybe there's some subtlety that's beyond me here, and I'd love to understand why.

How many samples are you using? Is the problem simply that the filter is slow to respond, or would it come out with the wrong value no matter how many inputs you push into it? Specifically, if you just push in a particular value (say, 2000), how long does it take until it reaches that value?

In general, what I know of Kalman filters (which is not super much) you need some number of measurements to make it "go" -- one sample per minute might not be sufficient for a good estimate until you've let it run for a longer time.

Finally, you initialize it with a guess of 65, but you say your range is from a few hundred to a few thousand. Are you supposed to convert the range of the sensors to an estimate of degrees Farenheit? If so, are you doing that conversion before you apply the filter?

You might want to Serial.println() the sensor value, the range-converted value, and the filtered output value for each measurement, and check out how they move over time.