"Are you living in southern california???"
Way up north in Canada.
BTW, you might enjoy going through this thread (900+ posts):
Lots of volunteers here ready to help with project questions.
We learn lots too !
You can read what's below if you want.
OR
Ignore what's below and just be confident the stuff just works like a charm.
Now there is one more important thing about what has been discussed.
unsigned long says the value has no sign i.e. always positive.
Integer math on the Arduino is done an unsigned calculation.
Let’s say currentMillis has overflowed and is now at a value of 100
Let’s say the value of heartbeatMillis was 4294967195
Our math will be:
currentMillis – heartbeatMillis
100 – 4294967196 = -4,294,967,096 however, the result is negative which it cannot be.
The Arduino drops negative part of -4,294,967,096 and we are left with = 200.
i.e. 100 – 4294967196 = -4,294,967,096 which converts to +200
200 >= 500 is not true so our LED will not toggle yet as we still need 300ms to go.
For a better explanation of this, read this discussion:
OR
Take it as there is no overflow problem in our timing calculations if we adhere to subtraction.
BTW you are now an expert in replacing delay( ) function with the BWD (Blink Without Delay) technique.