while (startState == HIGH)

Etemenanki:
... appunto ...

Se vuoi che un pulsante venga letto all'interno di un while, non pensi che ci dovrebbe essere una digitalRead ANCHE all'interno di quel while ? ... e se dentro c'e' un'altro while, magari pure dentro quello ? ... :wink:

provo...
Lo stesso pulsante 2 digitalread. Ti faccio sapere

Risolto, grazie!!!

while (millis() - timeStepStart < timeStepMillis) {                                   //ciclo fino a quando il tempo di partenza + durata Step è maggiore di millis
        int readingStart = digitalRead(buttonStartPin);
        if (readingStart == HIGH) {
          if ((millis() - startDebounceTime) > debounceDelay) {
            buttonStartState = HIGH;
          }
        } else {
          buttonStartState = LOW;
          startDebounceTime = millis();
          lastStartState = startState;
        }
        if (buttonStartState == HIGH && lastStartState == startState) {
          timeStepMillis = 0;
          break;
          startState = LOW;

Ho messo il digitalRead all'interno del secondo while (nel primo non veniva considerato), ho modificato leggermente la condizione del while e nell'if ho dovuto rendere false entrambe le condizioni dei 2 while più un break.
Così facendo esce come volevo, karma per te