Problema con lo switch case

Salve ragazzi sto facendo un poccolo menù, per ora lo sto testando con il serial monitor di Arduino.
Però ho un problema ho realizzato un incremento di una variabile:

#define NEXT  7
#define DOWN  8
#define UP    9
#define OK   10

int count = 0;
int tmax = 0;

void setup(){
  Serial.begin(9600);
  pinMode(7, INPUT);
  digitalWrite(7, HIGH); 
  pinMode(8, INPUT);
  pinMode(9, INPUT);
  digitalWrite(9, HIGH); 
  pinMode(10, INPUT);
  //Serial.println(tmax);
}

void loop(){
  
  int x = 0;
  if(digitalRead(UP) == LOW){
    x = 1;
  }
  switch(x){
  case 1:
    tmax = tmax + 1;
    Serial.print("   ");
    Serial.print(tmax);
    delay(150);
    break;
  }
  if(tmax == 50 ){
    tmax = 0;
    delay(15);
  }
}

e funziona bene, mentre con quest'altro:

#define NEXT  7
#define DOWN  8
#define UP    9
#define OK   10

int count = 0;


void setup(){
  Serial.begin(9600);
  pinMode(7, INPUT);
  digitalWrite(7, HIGH); 
  pinMode(8, INPUT);
  pinMode(9, INPUT);
  pinMode(10, INPUT);
  Serial.println("Home");
}

void loop(){

  if(digitalRead(NEXT) == LOW){
    delay(150);
    count = count + 1;
  } 
    switch(count){
  case 0:
    Serial.println("Home");
    delay(100);
    break;
  case 1:
    Serial.println("Set temp");
    delay(100);
    break;
  case 2:
    Serial.println("Set hum");
    delay(100);
    break;
  default:
    count = 0;
    delay(100);
  } 
}

In pratica le pagine le cambia, però me le stampa all'infinito. Non riesco a farlo stampare un'unica volta. Come mai?

Grazie, saluti.

Perché lo switch..case è messo dopo la lettura del pin. In ogni caso, sia con pressione del pulsante che non, lo switch..case verrà sempre eseguito (ricorda che il programma è eseguito come un flusso seriale, un'istruzione dietro l'altra, ed il loop che viene eseguito all'infinito). Quindi prova a racchiudiere lo switch..case nel blocco di codice relativo all'if che controlla il pulsante.

Ok tu hai perfettamente ragione, però questo era fatto in previsione di un ulteriore step. Infatti avevo intenzione successivamente di unire i due codici, in questo modo:

#define NEXT  7
#define DOWN  8
#define UP    9
#define OK   10

int count = 0;
int tmax = 0;

void setup(){
  Serial.begin(9600);
  pinMode(7, INPUT);
  digitalWrite(7, HIGH); 
  pinMode(8, INPUT);
  pinMode(9, INPUT);
  pinMode(10, INPUT);
  Serial.println("Home");
}

void loop(){

  int x = 0;
  if(digitalRead(NEXT) == LOW){
    delay(150);
    count = count + 1;
  } 
  switch(count){
  case 0:
    Serial.println("Home");
    delay(100);
  break;
  case 1:
    Serial.println("Set temp");
    if(digitalRead(UP) == LOW){
    x = 1;
  }
  switch(x){
  case 1:
    tmax = tmax + 1;
    Serial.print("   ");
    Serial.print(tmax);
    delay(150);
    break;
  }
  if(tmax == 50 ){
    tmax = 0;
    delay(15);
  }
    delay(100);
    break;
  case 2:
    Serial.println("Set hum");
    delay(100);
    break;
  default:
    count = 0;
    delay(100);
  } 
}

Se però faccio come mi hai suggerito tu, non incrementa la "tmax".
Qualche consiglio?

Grazie, saluti.