Controlar el estado de un LED con un botón táctil

int led = 6;
int boton = 5;
boolean estado = false;
int contador;

void setup() {
 pinMode(led, OUTPUT);
 pinMode(boton, INPUT);
 
}

void loop() {
  
  
 if (digitalRead(boton) == LOW){
  estado = true; 
 }

  if(digitalRead(boton) == HIGH && estado == true){
    contador++;

    if (contador >= 3){
      contador = 0;
    }
  }

///////////////////////////////////////////////////////////////////////////////////

  if (contador == 0){
    digitalWrite(led, LOW);
  }

  if (contador == 1){
    digitalWrite(led, HIGH);
  }
 

  if (contador == 2){
    digitalWrite(led, LOW);
    delay(100);
    digitalWrite(led, HIGH);
    delay(100);
  }
  
 }

Prácticamente lo que quiero hacer, es que si pulso el botón una vez, el LED se encienda, si lo vuelvo a pulsar el LED parpadee cada cien mili-segundos y si vuelvo a pulsar el botón se apague. Al principio creí que el botón no hacia su trabajo, lo comprobé usando el monitor y descubrí que el Arduino si leía el estado del botón pero, cuando hacia un chequeo de la variable "contador" iba de uno a dos sin que el botón se pulsara.

Schematic_BOTON_Sheet_1_20200219201202.pdf (19 KB)

ya probaste con resistencia pul down?

Sí, ya lo he intentado, sin embargo obtengo los mismos resultados

No estás teniendo en cuenta los rebotes del botón. Por eso el contador sigue incrementandose. Incluí una rutina que chequee eso.