Problema pulsante Timer

Ciao a tutti ho riscontrato un problema nel pulsante reset, ovvero il mio obiettivo è quello che se metto in pausa il timer, e poi premo il tasto reset si resetti tutto.
Il problema sta che se premo il tasto pausa mi va direttamente nella sezione reset e non capisco.
Prima di inserire il tasto reset la funzione play e pausa funzionava correttamente come posso risolvere questo problema?

#include <Arduino.h>
#include <TM1637Display.h>
//display 7 segmenti
#define CLK 2
#define DIO 3
//START-PAUSA
const int buttonPin = 7;
int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;
//RESET
const int reset_buttonPin = 8;
int reset_buttonState = 0;


//variabile tempo
int k = 10;

int step_funzione = 0;

TM1637Display display(CLK, DIO);

unsigned long previousMillis = 0;
const long interval = 1000;

void setup() {
  Serial.begin(4800);
  pinMode(buttonPin, INPUT);
  pinMode(reset_buttonPin, INPUT);
  
  
}

void loop() {

  
  switch (step_funzione) {
    case 0:    
      inizio();
      break;
    case 1:
      edit_time();
      break; 
    case 2:    // VAI ALLA FUNZIONE: CONTO ALLA ROVESCIA
      countdown();
      break;
    case 3:
      tempo_scaduto();
      break;
     case 4:
      reset();
      break;  
  }
}


void inizio(){

    //START
     Serial.println("Inizio");
      display.setBrightness(0x0f);
      display.showNumberDec(k);
    //-- VAI A SETTA IL TEMPO


    //-- VAI A COUNTDOWN
    int buttonState = digitalRead(buttonPin);
     
    if(buttonState == HIGH){
      step_funzione = 2;
    }

  }

void edit_time(){
  Serial.println("Edit_time");
  //inserisci encoder
}
////////////////////////////////COUNTDOWN///////////////////////////////
void countdown(){
  Serial.println("Countdown");
int buttonState = digitalRead(buttonPin);
if(buttonState != lastButtonState){
  if (buttonState == HIGH){
    buttonPushCounter++;      
  }
  delay(50);
}
lastButtonState = buttonState;
if (buttonPushCounter % 2 == 1){
    unsigned long currentMillis = millis();
     if(currentMillis - previousMillis >= interval) {
    
        previousMillis = currentMillis;
        display.showNumberDec(k); 
        k--;

       
        
        if(k<0){  
          step_funzione = 3;
        }
   }
}else{
  Serial.println("Pausa");
  
  int reset_buttonState = digitalRead(reset_buttonPin);
  if(reset_buttonState == HIGH){
      step_funzione = 4;
      delay(50);//delay per capire il secondo comando.
    }

}
}
///////////////////////////////////TEMPO SCADUTO///////////////////////////////
void tempo_scaduto() {
      int buttonState = digitalRead(buttonPin);
    if(buttonState == HIGH){
      k=10;
      step_funzione = 0;
      delay(50);//delay per capire il secondo comando.
    }
}

//////////////////////////////RESET///////////////////////////////////////////
void reset(){
  Serial.println("Reset");
  }

Hai messe delle resistenze pulldown sui pin dei pulsanti? Ciao Uwe

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?

Sò per esperienza che sono a rischio ulteriore sgridata ed a non poter più postare,ma solo leggere.......ma certe volte mi scappano :( :(

se come me non avete moltissima esperienza,vi consiglio di evitare i libri in librerie per il momento......molto meglio CAPIRE come funziona un display a segmenti,.....dopo per comodità e per sketch più complessi magari va bene metterli.....ma bisogna decifrarli.

Stavolta mi mettono in punizione,me lo sento :confused: