Semplice funzione di ritardo senza delay

Avrei bisogno di realizzare una semplice funzione di ritardo da utilizzare al posto di delay().
Ho cercato ampiamente ma tutte si appoggiano a millis() che dopo circa 50 giorni si azzera creando probabilmente dei problemi.
Ho provato a modificare questo banale sketch inserendo la funzione "pausa"

int led =13;
void pausa();

void setup(){
 pinMode(led, OUTPUT); 
}

void loop(){
 digitalWrite(led, HIGH);
 pausa();
 digitalWrite(led, LOW);
 pausa();
}

void pausa(){
  long x =0;
  long interval = 3000;
  while(x < interval){      // tempo di ritardo 
    x = x++;	
  }	
}

ma non funziona, led si accende ma non si spegne più.
Idee?

Scusate ma sono alle prime armi...

Se devi mettere una pausa devi usare il delay(). Se invece devi temporizzare un evento puoi usare la funzione millis().
Se programmi correttamente il reset del contatore è ininfluente. Se programmi male allora puoi incorrere in errore dopo 47 giorni e qualche ora.
--> http://www.leonardomiliani.com/2012/come-gestire-loverflow-di-millis/

La soluzione è disponibile dal 2012, ma le leggende metropolitane sono dure a morire. :zipper_mouth_face: