Salve,
In generale farei così: il pulsante di pausa chiama una funzione Pausa() che setta il programma come deve per cominciare una pausa indefinita. Successivamente la funzione presenta un while (non play) data una condizione abbastanza facile di play, alla fine della quale il programma é nuovamente settato funzionante.
Per aggiungere la possibilità di resettare il timer durante la pausa si inserisce all'interno della while {} una if (reset), nella quale si pone un richiamo ad una funzione Reset () che setta il timer a 0 (come il reset normale), e, molto importante SUCCESSIVAMENTE una return supplementare (oltre a quella presente a fine funzione Pausa().
In caso di lavoro senza pulsanti (ho sentito di timer via seriale, ma non mi pare qui sul forum) così va benissimo. Lavorando con i tasti/pulsanti bisogna inserire un debounce (anti rimbalzo) preferibilmente hardwere, visto che software comporta una pressione per un certo tempo, che non é accettabile lavorando con il tempo. Quanto a come farlo hardware...potete per favore spiegarlo anche a ne?