I modified your code to produce a working example:
const unsigned long fiveMinutes = 20 * 1000UL;
unsigned long lastCheck = 0 - fiveMinutes;
unsigned long now = 0;
void setup ()
{
Serial.begin (115200);
Serial.println ();
Serial.println ("Starting.");
Serial.println (fiveMinutes);
} // end of setup
void doStuff ()
{
Serial.println ("Doing stuff");
}
void loop() {
now = millis();
if ( now - lastCheck >= fiveMinutes ) {
doStuff();
lastCheck = now;
}
}
I reduced the interval to 20 seconds, and Ignacio Vazquez-Abrams is correct about the initial test, however apart from that, I see "Doing stuff" every 20 seconds.
I thought I could update global variables inside subroutines ...
You can.
Are you sure you didn't have:
void loop() {
unsigned long lastCheck;
...