Refresh time...Can anyone help me please??

PaulS:

Also note the use of subtraction instead of addition when comparing timer values.

Then, you potentially cause an overflow here:

lastReadTime += refresh_rate;

Yes, it overflows in exactly the same way that millis() overflows, resulting in the required behaviour.

PaulS:

lastReadTime += refresh_rate;

Shouldn't what is being recorded by when an action last occurred (millis()) not some future time when the action should happen again?

After that statement has executed, lastReadTime contains the time at which the event just processed was due. In other words, a value close to the current value of millis().