Problema di programmazione.

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.