pulsador para cambiar de menú

Tengo este codigo para leer un pulsador y de acuerdo a cuantas veces se "pulso" muestra un menú..el tema es que no logro entender porque no funciona.

Tambien cdo miro por la consola el serial.print(numeropulsaciones) todo el tiempo muestra un "1" sin ni siquiera presionar el pulsador. El pulsador está conectado con una resistencia 4k7 a masa (pull-down).

  int boton = 22; /Mega
  int espera = 200;
  int tiempo = 0;
  int numeropulsaciones;

void setup(){
                   
pinMode(boton,INPUT);

}

void loop(){

  if ((digitalRead(boton) == HIGH)&& (millis()-tiempo >espera))
  {
    numeropulsaciones ++;
    Serial.println(numeropulsaciones);
  }
  if (numeropulsaciones == 3)
    numeropulsaciones = 0;
    
  switch (numeropulsaciones)
  {
  
  case 1:
    tft.print("menu 1");
    break;  
  case 2:
    tft.print("menu 2");
    break;
  case 3:
    tiempo = millis();
  }
  delay(100);
  
}

Todos esto esta pensado para un resistor pull down.
Tienes un resistor de 10k a masa con el pulsador?

Hola surbyte gracias por la ayuda, si mira es pull-down con una resistencia 4k7 como te decia en el primer post.

Una pregunta tonta: que quiere decir que el pulsador está conectado a masa con la resistencia? La resistencia debe ir del pin de entrada a masa y luego del pin al pulsador y este a VCC.

Luego tiempo solo lo cambias en el case 3. No sé si es eso lo que pretendes o se te ha escapado algo.

Hola, quiero aclarar que no tengo problemas con la conexion de los componentes, solo pregunto por la programacion que en este caso no me esta funcionando.

Por las dudas subi una foto aca donde sale la configuracion "pullDown" que estoy utilizando.

projects_c5449483-cfd6-420f-a846-08e4cfc8530a.jpg

Bueno ayer escribí una respuesta y estaba modificando tu código
Te lo resumo porque no tengo tiempo de hacerlo de nuevo.
Lo que veo es que tiempo arranca en 0, por lo tanto tu primer ciclo de pulsaciones es inmediato, 3 loops en pocos 200 mseg ya que tiempo es 0 entonces

millis()-tiempo= millis() y siempre será mayor que espera que es 200.
Luego llegas poner tiempo = millis()

pero tu dices que queda siempre en 1, lo que hace pensar que ese delay(100) de algun modo conspira con tu código.
Retiralo ya que se supone que la demora la debe generar millis()-tiempo y no delay(100)

A ver que ocurre.