Datalogger di pressione

Ma scusa, la loop() è già una while() (anzi while(1)), perché aggiungerne una tua? Tra l'altro ti impedirà in futuro di fare anche altre cose...
In questi casi la cosa migliore, e che permette maggiore flessibilità anche in futuro, è implementare una "macchina a stati finiti" e "lasciare libera" la loop() di girare. Se non hai mai avuto a che fare con macchine a stati finiti chiedi pure, comunque sia in linea di massima sarebbe una cosa del tipo:

volatile boolean evento = false;
// Stati:
#define S_START 0
#define S_WAIT 1
#define S_EXEC 2
// Variabile di stato
int stato = 0; // 0=stato iniziale, 1= attesa, 2=fai qualcosa dopo l'attesa
...
void setup()
{
  ...
}

void loop()
{
  switch (stato)
  {
    case S_START:
      if (Miacondizione) {
        evento = false;
        // Attivo l'interrupt, ad esempio:
        attachInterrupt(digitalPinToInterrupt(PIN_ALARM), IST_alarm, RISING;
        stato = S_WAIT;
      }
      else
        FaiQualcosa();
      break;

    case S_WAIT:
      if (evento)  {  // E' stato attivato l'interrupt!
        detachInterrupt(digitalPinToInterrupt(PIN_ALARM));
        stato = S_EXEC; // Procedi
      }
      break;

    case S_EXEC:
      FaiQualcosaltro();
      stato = S_START; // Torno all'inizio (?)
      break;
}
...
void IST_alarm{
  evento = true; // Attenzione agli interrupt multipli, eviterei evento = !evento;
}