Aqui não existe o conceito de parar o programa.
Existe o conceito do programa fazer algo para responder a um evento.
No teu caso...
void programa_que_funciona_muito_bem(void) {};
void setup(){}
unsigned char flag = 0;
void loop(){
if (botao_apertado == TRUE && flag == 0) {
programa_que_funciona_muito_bem();
flag = 1;
}
if (botao_apertado == FALSE) {
flag = 0;
}
}
Quando apertas o botão, ele corre a funcao programa_que_funciona_muito_bem() uma vez. Quando soltas o botão, o Arduino fica pronto a correr de novo a funcão quando carregares no botão de novo.