Il problema mi sembra anche di logica di programmazione.
Credo tu debba considerare una programmazione utilizzando una variabile di stato.
Ovvero una variabile dove 0=fase iniziale, 1=ha premuto il tasto, 2=altro momento.
La loop() viene eseguita di continuo. Perciò internamente alla loop secondo me devi usare uno switch() sulla variabile di stato per sapere in quale "momento" sei.
void loop()
{ ...
switch(iState)
{ case 0: ...
if(premuto pulsante) iState=1;
break;
case 1: //premuto il pulsante
// allora qui verifico distanza
break;
case 2:
...
}
}
Guarda questo libro (purtroppo in inglese):
il capitolo 3 parla delle macchine a stato (il tipo italiano ha creato ottimi robot con i lego nxt, programmati in c)
su goglebooks sono leggibili i primi 3 capitoli. Il capitolo 3 è sulle macchine di stato.
Spero possa esserti di aiuto.