Using millis() instead of delay

'static' just means that it keeps its value even when the function it is defined in exits. Every caller to the function will be using the same instance of the variable.

I just tried it on an Arduino UNO with:

void loop(){
  //blink the LED on pin 13 every 500 ms forever...
  timer(500, blinking);
  //fade an LED on pin 9 forever...
  timer(30, fading);
}

For reasons I explained above the LED on pin 13 never blinked.