BLINK 2.0
(idea Testato - creazione (se ha voglia e mi riesco a spiegare) Leo :-) )
void loop()
{
digitalWrite(13, HIGH);
testatoDelay(1000);
digitalWrite(13, LOW);
testatoDelay(1000);
nel_frattempo_che_lampeggi_fai_infinite_cose();
}
Questo codice non va bene

Ti dimentichi che la CPU del microcontrollore esegue il codice in maniera sequenziale, ossia una istruzione dietro l'altra.
Tu stai cercando un delay che non sia bloccante ma in realtà vuoi un delay che dica al compilatore:
ecco, hai trovato la newDelay? Bene, ignorala e passa oltre.
Ora però ti spiego cosa succede col tuo codice:
1) loop
2) metti su HIGH il led 13
3) testatoDelay? allora salta avanti
4) metti su LOW il led 13
5) altra testatoDelay? salta avanti
6) ho del codice da eseguire, bene lo eseguo
7) torno a 1)
Ecco cosa farebbe testatoDelay

In realtà tu vorresti qualcosa tipo un blocco di codice da mettere nella tua testatoDelay da eseguirlo solo dopo l'intervallo desiderato. Come lo vuoi te non si può fare, va fatto in un'altra maniera, ad esempio così:
testatoDelay(1000, digitalWrite(13, HIGH));
testatoDelay(1000, digitalWrite(13, LOW));
codice_da_eseguire
Ma così dovrei prendere il puntatore alla funzione e passarlo poi ad uno scheduler che lo infilerebbe nell'elenco dei lavori da eseguire, poi ogni volta dovrei passarglielo come parametro e tutte le volte dovrebbe controllare che funzione è, se è da eseguire o se è da saltare.
Ma allora non è meglio la myDelay attuale?
E poi statureresti la delay intesa come funzione che ferma il codice. Può esserci un'occasione in cui la delay serve, con la tua delay la si salta a piè pari.