Pulsante multifunzione

Salve a tutti, Ho un nuovo problema con il mio contasecondi programmabile.
Il problema consiste nel gestire il pulsante di programmazione ho fatto che premo il pulsante1 ed entro nella programmazione1 alzo la variabile1 , poi ho fatto che se premo il pulsante1 e ho la variabile1 alzata entro in programmazione2.
Il problema sorge che nella lettura del programma le cose si sormontano, praticamente entra subito in programmazione2 . Come posso fare per fermare il programma alla programmazione1 e al nuovo premere il pulsante1 va alla programmazione2?
Grazie a tutti

Devi controllare che il pulsante sia stato rilasciato.

Fai qualcosa solo quando il pulsante viene visto premuto per la prima volta. per questo usa uan variabile di stato.
vedi http://www.instructables.com/id/Beginner-Arduino/step15/Button-As-Toggle-Switch/
Ciao Uwe

Grazie uwefed,
scusa la mia ignoranza ma non capisco come posso usare quel programma , mi spiego meglio come faccio a capire se lo stato di discesa serve a un programma o all'altro?

probabilmente è un problema di debounce. cioè alla pressione del pulsante corrispondono una serie indefinita di micro contatti, per cui arduino nella maggiorparte dei casi legge tante pressioni consecutive..
cerca debounce.

come faccio a capire se lo stato di discesa serve a un programma o all'altro?

Con un test condizionale, tipo un "if".
Se A vale 0 fai questo altrimenti fai quest'altro.

niente il problema non riesco a risolverlo.... quello che dovrei fare è praticamente con un solo pulsante accendere in sequenza tre uscite

premo la prima volta si accende l'uscita1
premo la seconda si accende l'uscita2 e spengo uscita1
premo la terza volta si accende la terza e si spengono le altre due
premo la quarta volta e si spengono tutte

tutto questo posso farlo con appunto la sequenza "if" e "else" ma o metto un delay di tipo 1sec ma mi rallenterebbe il programma ...
Non ne vengo fuori ragazzi purtroppo sono troppo alle prime armi, ma penso che se voglio continuare con la programmazione di arduino questo problema mi si ripresenterà varie volte...
Grazie della pazienza

Se questo è il problema, l'approccio è sbagliato.
Devi incrementare una variabile ad ogni pressione e DOPO eseguire l'azione in base al suo valore.

byte stato = 0; //stato iniziale: tutto spento
void loop() {
  if (pulsantePremuto) {
    stato++;
    if (stato > 3) { stato = 0; } //riparto da zero
  }
  switch (stato) {
    case 0:
      ...
      break;
    case 1:
      ...
      break;
    case 2:
      ...
      break;
    case 3:
      ...
      break;
  }
}

Non è codice, è pseudo codice. Serve solo per farti capire la logica. Metti tu i ritardi con delay o millis nei punti in cui reputi necessari.