Al pulsar "n" veces el led empieza a parpadear

Hola, llevo un tiempo intentando hacer que, al pulsar un pulsador "n" veces se encienda un led, pero no antes. Mi problema es que no soy capaz de acumular el numero de pulsaciones que hago en el boton en una variable. Este es el destrozo que he hecho

const int LED = 13;
  const int BUTTON = 7;
  int val = 0;
   
void setup() {
  
  pinMode(LED, OUTPUT);
  pinMode(BUTTON, INPUT);
  Serial.begin(9600);
}

void loop() {

  Serial.print(val);
  val = digitalRead(BUTTON);
    if (val == HIGH){
      val +1;
    }
    else{
      digitalWrite(LED, LOW);
    }

    if (val == 2){
      digitalWrite(LED, HIGH);
    }
    else{
     digitalWrite(LED, LOW);
    }
}

Gracias :smiley:

Esto

Serial.print(val);
  val = digitalRead(BUTTON);
    if (val == HIGH){
      val +1;
    }
    else{
      digitalWrite(LED, LOW);
    }

cuando tu presionas el botón, se incrementa como loco... pero además lo haría si estuviera bien programado.

val + 1 no compila, luce y estoy seguro que es una tarea escolar pero... como te has esforzado te diré como hacerlo.

Corrijamos ese error debes usar esto

val++;           // o

val = val +1; // o
val += 1;

cualquier forma es aceptable.

en lugar de mirar si esta en HIGH mira el cambio de estado, para ver si cambio de estado tienes que memorizar el estado anterior.

#define  N          5
const byte LED    = 13;
const byte BUTTON = 7;
bool val;
bool valAnt       = false;
   
void setup() {
  
  pinMode(LED, OUTPUT);
  pinMode(BUTTON, INPUT);
  Serial.begin(9600);
}

void loop() {

  Serial.print(val);
  val = digitalRead(BUTTON);
  if (val && !valAnt ){
      val++;
  }
  valAnt = val;

  if (val == N){  // Si presionaste N veces se enciende el Led sino sigue apagado
      digitalWrite(LED, HIGH);
  }
  else{
      digitalWrite(LED, LOW);
  }
}